1.类中属性的隐式初始化,代码如下,我们看下不同类型默认的初始值是什么
创建一个Demo类如下
class Demo { int a; byte b; short c; long d; boolean e; char f; float g; double h; Demo demo; }
可以看到初始化的值如下:
2.在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间。它们仍然会在任何方法(包括构造器)被调用之前得到初始化。
我们看如下代码:
public class Test01 { public static void main(String[] args) { House house = new House(3); } static class House { Window window3 = new Window(3); public House(int windows) { System.out.println("house(" + windows + ")"); } Window window1 = new Window(1); Window window2 = new Window(2); } static class Window { public Window(int marker) { System.out.println("window(" + marker + ")"); } } }
打印结果如下:
window(3) window(1) window(2) house(3)
可以看到,在初始化时,会先对类中的属性进行显示初始化,即对属性进行一次显示的赋值,在显示初始化执行完后,会对类进行构造函数初始化。
3.静态数据的初始化
首先我们要知道,静态数据是所有类对象共享的,静态数据只占一份存储区域。静态数据随着类的加载而加载,static关键字只能作用于域,我们不能在方法中使用static关键字(稍后会解释为什么)。如果一个我们在声明类时,没有给静态只能初始值,那么它会被默认初始化成对应的值(见【1】默认初始化)
4.这里提前说一下:
对于初始化我们要记得一个原则,先静态后非静态,先父后子
即在初始化一个类时,会先初始化对静态数据进行初始化,在父类跟子类同时有静态数据时,遵循先父后子的规律,当静态数据初始化完后,非静态的数据初始也遵循先父后子的顺序