标签:顺序 bsp 不同 style static string span 默认 --
1.将对象内存空间初始化为二进制0(所有的数据成员被设为默认值)
2.如果该类有基类则初始化其基类(调用默认基类构造器,也可在子类构造器中指定调用基类的某个构造器)
3. 静态成员和静态域(谁在前谁先初始化,且在内存中只占一份空间,同一个类不同对象可以共享)
4.main方法
5.非静态成员变量,引用,实例初始化 被初始化
6. 构造器
1,2,3,4为类加载过程,5,6为new对象过程,只有new会执行。
class A { A() { System.out.println("基类构造器"); System.out.println("证明数据成员被设为默认值"); draw(); } A(String s) { System.out.println(s); } void draw() { System.out.println("A.draw()"); } } public class Test extends A { int i = 5; Test() { System.out.println("子类构造器"); System.out.println("证明数据成员在构造器调用之前被初始化"); draw(); } String b = "非静态成员"; A a = new A(b + "与非静态引用"); { A b = new A("实例初始化"); } String c = "非静态成员与实例初始化平级,谁在前先初始化谁"; A d = new A(c); void draw() { System.out.println("i = " + i); } static A start = new A("---类加载---"); static String e = "静态成员"; static A f = new A(e + "和静态引用"); static { A g = new A("静态域"); } static String h = "静态成员与静态域平级,谁在前先初始化谁"; static A j = new A(h); public static void main(String[] args) { System.out.println("main执行"); System.out.println("---创建Test对象---"); Test k = new Test(); } }
输出结果:
---类加载--- 静态成员和静态引用 静态域 静态成员与静态域平级,谁在前先初始化谁 main执行 ---创建Test对象--- 基类构造器 证明数据成员被设为默认值 i = 0 非静态成员与非静态引用 实例初始化 非静态成员与实例初始化平级,谁在前先初始化谁 子类构造器 证明数据成员在构造器调用之前被初始化 i = 5
标签:顺序 bsp 不同 style static string span 默认 --
原文地址:https://www.cnblogs.com/mibloom/p/9040354.html