由于Java数组涵盖的内容比较多,这里从个人的角度对主要的内容进行相关的讲解。
如有不足,欢迎批评指正~
1)Java数组是动态还是静态的啊?
Java语言是典型的静态语言,由此推断Java数组也是静态。何为静态,就是说Java数组在初始化的时候必须确定在内存中分配的空间的大小。
具体实现方式就是在初始化数组的时候(注意不是声明数组的时候,这两个概念别搞混了)指定数组的长度,或者指定初始化数组的内容哦。
同时需要明白数组变量并不是数组本身,数组变量是存储在栈中的,对应的数组对象是存储在堆中的。栈中的数组变量指向堆中的数组对象。
例如:
package com.yonyou.test;import java.util.HashSet;import java.util.Iterator;import java.util.Set;/** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */public class Test{ public static void main(String[] args) { int[] array=new int[10];//初始化数组的时候指定类数组的长度 int[] array_new=new int[]{1,2,3};//初始化数组的时候指定了对应的相关元素 //需要注意的是这里不能再指定对应的长度了哦 //否则的话会报错的哦。 System.out.println("数组一的长度为:"+array.length); System.out.println("数组二的长度为:"+array_new.length); }}
2)Java数组的默认初始化值
a.基本数据类型byte,short,int,long,默认的初始化值为0;
b.基本数据类型float,double的默认初始值为0.0
c.基本数据类型char的默认初始值为:\0000
d.基本引用类型的默认初始值为null
package com.yonyou.test;import java.util.HashSet;import java.util.Iterator;import java.util.Set;/** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */public class Test{ public static void main(String[] args) { short[] array_0=new short[10]; int[] array_1=new int[10]; long[] array_2=new long[10]; byte[] array_3=new byte[10]; char[] array_4=new char[10]; boolean[] array_5=new boolean[10]; float[] array_6=new float[10]; double[] array_7=new double[10]; Car[] array_8=new Car[10]; System.out.println("short:"+array_0[5]); System.out.println("int: "+array_1[5]); System.out.println("long: "+array_2[5]); System.out.println("byte: "+array_3[5]); System.out.println("char的默认值是否为\\u0000:"+(array_4[5]=='\u0000'));//无法直接显示字符的内容 //间接的显示 System.out.println("boolean: "+array_5[5]); System.out.println("float : "+array_6[5]); System.out.println("double: "+array_7[5]); System.out.println("引用类变量初始化值为:: "+array_8[5]); } /** * 创建一个测试对象 * @author 小浩 * @创建日期 2015-3-19 */ class Car{ }}
3)Java数组一定要初始化吗?
不是的。对于具体的反例,请看下面的内容:
package com.yonyou.test;/** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */public class Test{ public static void main(String[] args) { Car[] car1=new Car[10]; Car[] car2; car2=car1; System.out.println(car2.length); } /** * 创建一个测试对象 * @author 小浩 * @创建日期 2015-3-19 */ class Car{ }}
4)Java数组初始化的几种方式?
数组的初始化一般分为两种:
一种为静态初始化:
在创建数组的时候就指定了数组的长度,如下面的内容:
int[] array_static=new int[]{1,2,3};
第二种为动态初始化:
在创建数组的时候仅仅指定数组的长度
int[] array_dynamic=new int[10];
具体应用实例如下:
package com.yonyou.test;/** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */public class Test{ public static void main(String[] args) { //静态初始化 int[] array_static=new int[]{1,2,3}; //动态初始化 int[] array_dynamic=new int[10]; }
4)Java中的多维数组是怎么回事?
说句到家的话,java中没有多维数组的概念。java中的多维数组可以当成一维数组来处理。初始化多维数组的时候可以转换成对应的一维数组。
只不过这时一维数组中存储的不在是具体的元素值,而是对应的数组的引用地址。具体的也不多说了,请看下面的例子:
package com.yonyou.test;/** * 测试类 * @author 小浩 * @创建日期 2015-3-2 */public class Test{ public static void main(String[] args) { Object[] obj1=new Object[4]; obj1[2]=new Object[2]; Object[] obj2=(Object[]) obj1[2]; obj2[1]=new Object[3]; Object[] obj3=(Object[]) obj2[1]; obj3[2]=new int[5]; int[] obj4=(int[]) obj3[2]; obj4[3]=100; System.out.println(obj4); System.out.println( ((int[])((Object[])((Object[])obj1[2])[1])[2]) ); System.out.println(obj4[3]); System.out.println(((int[])((Object[])((Object[])obj1[2])[1])[2])[3]); } }
多维数组的内存模型图如下:
好吧,就先到这里吧。