JAVA基础篇 之 类的初始化

  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)

可以看到,在初始化时,会先对类中的属性进行显示初始化,即对属性进行一次显示的赋值,在显示初始化执行完后,会对类进行构造函数初始化。

  1. 静态数据的初始化

    ​ 首先我们要知道,静态数据是所有类对象共享的,静态数据只占一份存储区域。静态数据随着类的加载而加载,static关键字只能作用于域,我们不能在方法中使用static关键字(稍后会解释为什么)。如果一个我们在声明类时,没有给静态只能初始值,那么它会被默认初始化成对应的值(见【1】默认初始化)

  2. 这里提前说一下:

    对于初始化我们要记得一个原则,先静态后非静态,先父后子

    即在初始化一个类时,会先初始化对静态数据进行初始化,在父类跟子类同时有静态数据时,遵循先父后子的规律,当静态数据初始化完后,非静态的数据初始也遵循先父后子的顺序

原文地址:https://www.cnblogs.com/daimzh/p/12854459.html