创建了就是在Java堆上分配了内存,但是这被划出来的内存没有被初始化,也就是全部为0,初始化就是给这被划出来的内存赋值为0或者1;
看一段代码,一个类的数组,如果每一个数组里的元素是一个类,只是简单的一句new 类名[10];而没有初始化里面的每一个元素绝对报空指针异常;但是为什么给每一个元素new之后就没有报错了呢,????new 类名[10],并不是创建了10个这样子类对象实例的空间,而只是创建了10个这样子的引用,存储这10个引用的区间是连续的,这些引用是符号引用解析到数组元素的类名上去,只是执行到这一步是还不知道数组元素里面每一个对象实例的空间地址的,只有创建了每一个对象实例 hashTable[i]=new EmpLinkList();(当然这每一个引用会指向它每一次new出来的那一块空间)才知道每一个对象实例的地址,也就是才可以调用里面的成员和方法。。。那为什么new int[10]就可以一次性直接分配了10个int的空间呢。因为这是基本的数据类型,是划分内存的最小单位之一
Integer[] ints = new Integer[10];
System.out.println(ints[0]);输出null.包装类默认为null
但是int基本类型默认为0;
public class HashTable {
EmpLinkList[] hashTable;
int size;
public HashTable(int size) {
this.size = size;
/*//这个new只是把这个数组在new创建了,创建了的意思是分配了内存,但内存空间还没有初始化的;
这是分配了这么多个数组长度的类的空间,但是里面的元素还没有初始化,会报NullPointerException
*就好像int[] ints = new int[10];
System.out.println(ints[0]);输出0;这10个int的内存是创建了;但是没有初始化,
但是基础数据就类型默认是0;所以是输出0;没有报错
* */
hashTable=new EmpLinkList[size];
for (int i=0;i<size;i++){
hashTable[i]=new EmpLinkList();
}
}
}
java数组是静态的
Java 语言是典型的静态语言,因此 Java 数组是静态的,即当数组被初始化之后,该数组 所占的内存空间、数组长度都是不可变的。Java 程序中的数组必须经过初始化才可使用。所谓初始化,即创建实际的数组对象,也就是在内存中为数组对象分配内存空间,并为每个数组 元素指定初始值。
数组的初始化有以下两种方式。
静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。
动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。