1、成员初始化

java尽力保证,所有的变量在使用前都能得到恰当的初始化
  • 对于方法中的局部变量,Java为了贯彻这种思想,会对所有未给出默认值的局部变量予以编译错误的提示
  • 对于类中的成员变量,Java会自动为没有做初始化的基本类型数据变量赋予一个默认值,默认值参见下表

boolean

false

char

[]

byte

0

short

0

int

0

long

0

float

0.0

double

0.0

reference

null

2、构造器初始化

可以用构造器来进行初始化,在运行时刻,可以调用方法或者执行某些动作来确定初始值,但是!

无法阻止自动初始化的进行,他将在构造器被调用之前发生。

换句话说,就是一个类内部的成员变量在调用构造器对其进行初始化的时候成员变量已经提前被执行了初始化的动作

2.1 初始化的顺序

在类的内部,变量定义的先后顺序决定了初始化的顺序。

这句话的意思是,一个对象中可能包含许多成员变量,构造器 ,方法等;无论如何最先执行初始化的一定是成员变量

2.2 静态数据初始化

无论创建多少个对象,静态数据都只占一份存储区域。这就有点像一根树枝上长了许多花,你可以说花拥有树枝,但是的确只有一根树枝。。强行解释

下面说初始化的问题,

  • 如果一个静态基本类型域没有对它初始化,他将会获得基本类型的标准初始值。
  • 如果他是一个引用对象,会得到一个null初始值。

2.3 数组初始化

类似 int[] a;  和 int a[];  并没有这样的写法:int[100] a;

编译器 不允许 指定数组的大小,因此并没有为数组本身分配任何空间。得到的只是一个引用而已

为了给数组进行空间的分配,必须要执行初始化,初始化的方式 是 :int[] a ={1,2,3,4,5}; 或 int[] a = new int[20];

  • 基本数据类型数组一旦初始化,数组内的元素类型会自动初始化为基本类型的初始值
  • 引用数据类型数组一旦初始化,它还是个引用数组,只有引用的东西被new出来,才算初始化完毕。

所有的数组都有一个固有成员,可以通过它获知数组包含多少元素,这个就是length