数组(array)是相同类型变量的集合,可使用共同的名字引用它。数组可被定义为任何类型,能够是一维或多维。数组中的一个特别要素是经过下标来访问它。数组提供了一种将有联系的信息分组的便利方法。注意:若是你熟悉C/C++,请注意, Java数组的工做原理与它们不一样。数组
一、数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用。数组保存的仅仅是对象的引用,而不是对象自己。安全
二、数组自己就是对象,Java中对象是在堆中的,所以数组不管保存原始类型仍是其余对象类型,数组对象自己是在堆中的。ide
三、数组声明的两种形式:1、int[] arr; 2、int arr[]; 推荐使用前者,这符合Sun的命名规范,并且容易了解到关键点,这是一个int数组对象,而不是一个int原始类型。函数
四、在数组声明中包含数组长度永远是不合法的!如:int[5] arr; 。由于,声明的时候并无实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。对象
五、在数组构造的时候必须指定长度,由于JVM要知道须要在堆上分配多少空间。反例:int[] arr = new int[];索引
六、多维数组的声明。int[][][] arr; 是三维int型数组。内存
七、一维数组的构造。形如:String[] sa = new String[5];it
或者分红两句:String[] sa; sa = new String[5];io
八、原始类型数组元素的默认值。对于原始类型数组,在用new构造完成而没有初始化时,JVM自动对其进行初始化。默认值:byte、short、 int、long--0 float--0.0f double--0.0 boolean--false char--'"u0000'。(不管该数组是成员变量仍是局部变量)编译
九、对象类型数组中的引用被默认初始化为null。如:Car[] myCar = new Car[10]; 至关于从myCar[0]到myCar[9]都这样被自动初始化为myCar[i] = null;
十、对象类型的数组虽然被默认初始化了,可是并无调用其构造函数。也就是说:Car[] myCar = new Car[10];只建立了一个myCar数组对象!并无建立Car对象的任何实例!
十一、多维数组的构造。float[][] ratings = new float[9][]; 第一维的长度必须给出,其他的能够不写,由于JVM只须要知道赋给变量ratings的对象的长度。
十二、数组索引的范围。数组中各个元素的索引是从0开始的,到length-1。每一个数组对象都有一个length属性,它保存了该数组对象的长度。(注意和String对象的length()方法区分开来,这二者没有统一块儿来是很遗憾的。)
1三、Java有数组下标检查,当访问超出索引范围时,将产生ArrayIndexOutOfBoundsException运行时异常。注意,这种下标检查不是在编译时刻进行的,而是在运行时!也就是说int[] arr = new int[10]; arr[100] = 100; 这么明显的错误能够经过编译,但在运行时抛出!
Java的数组下标检查是须要额外开销的,可是出于安全的权衡仍是值得的,由于不少语言在使用数组时是不安全的,能够任意访问自身内存块外的数组,编译运行都不会报错,产生难以预料的后果!