在标准类库中的System类,有一个属性叫做out,这个属性是属于类PrintStream的,其中我们常用的println()就是这个类中定义的在控制台输出数据的方法;
在该类中提供了从C中移植过来的方法:printf(“a=%d,b=%f\n”,a,b);此处的…是指输出数据的个数不定,可以是任何个数;
Java中的数组:
不同类型的编程语言中都有自己的数组,这是一种重要的数据结构;
数组是什么?
用来保存同种类型的数据集合;这种集合中的数据是可以重复的
比如说用来保存一个班的考试成绩,若干个同学的年龄…
数组名,下标,元素
访问数组集合中的每个值(元素),用数组名加下标的方式:arrayName[index]
其中index的范围为:[0,len) 区间
Java中的数组操作中,可以通过数组对象的属性length来得到元素个数;
在方法中定义局部变量或块变量时,在使用之前一定要初始化(首次赋值);
在C或C++中通常情况下也需要对变量初始化,但不是必须的。
但在java或C#这些完全面向对象的语言中,一个变量在使用前必须初始化;
用什么值对变量初始化?
用这种类型的“零”值!
各种基本类型的零值分别是多少?
byte: 0
short:0
int:0
long:0L,0l
float:0.0f,.0f
double:0.0,.0
boolean:false
char:0,’\0’,’\u0000’
在Java中,所有非内置类型的类型,称为对象类型,或非内置类型,或构造类型;
Java中的数组是基本类型吗?
不是。它是一种对象类型,一种构造类型;
构造类型对象的“零值”,统一为null;
int[] xs = new int[6];
使用引用xs来指向一个连续的内存块,这个内存块可以存放6个整型元素,每个块中是否有值,可能有三种情况:
1、 有垃圾值存在
2、 像对待简单变量,不进行初始化
3、 对每个元素进行了初始化,用0
在Java中,没有垃圾值这个概念;
在Java中,定义的局部变量不会自动初始化,但数组对象中的每个元素会初始化;
java中简单内存分析:
硬盘与内存:
数据存储到硬盘上,因为硬盘存储量大,存取效率低;
程序运行在内存中,因为内存存储量小,但速度快;
物理内存在Java中和在其他语言中一样,也是分为几部分:
1、 栈区:stack,6%左右,用来存放内置类型的变量,引用变量(只与所在系统中整数占用的内存相同),
2、 堆区:heap,90%左右,用来存放对象,数组元素;
哪个区域中内存分配的效率高?栈区效率高。
3、 代码区域:代码,静态变量,静态属性,常量池,
一维数组的特点和优势:
特点:
1、 是一种线性结构,通过数组名加下标访问
2、 它有且只能有一个首元素,首元素前没有前趋元素;
3、 它有且只能有一个尾元素,尾元素后没有后继元素;
4、 中间元素,有且只能有一个前趋元素和一个后继元素;
优势:
1、 访问方便,随机(任意下标)访问;
不足之处:
1、 一旦数组被定义,长度就不能改变。会在堆区给这个数组分配内存,在可见范围内,内存不会释放,内存块也不能增加和删减;
2、 删除和插入时效率很低;
for(表达式1;表达式2;表达式3){//循环体}
称为“经典的for循环”
在5.0版本之后,对经典的For循环进行了扩展,扩展为for_each循环;
这里的”each”指集合中的每一个元素;
for_each是遍历数组用的;
for (int i = 0; i < fibonacci.length; i++) { System.out.printf("%16d", fibonacci[i]); } System.out.println(); for (long element : fibonacci) { System.out.printf("%16d", element); } |
两种for循环输出结果相同。
两种循环的比较:
哪一种更有用?经典的更有用!
多维数组?称为“数组的数组”
无论一个数组有多少维,都先看成是“一维数组”;
在多维数组(非一维)中,维度相同的元素,可以互相赋值;