public class A {
static D d = new D(222);
static {System.out.println("static A");}
static String aString1="20";
static D bb = new D(22);
D b=new D(12);
A(){System.out.println("A");}
{System.out.println("block A");}
static class B{
{System.out.println("block B");}
A a = new A();
static {System.out.println("static B");}
B(){System.out.println("B");}
B(int number){
System.out.println("number"+number);
}
}
static class C extends B{
static {System.out.println("static C");}
{System.out.println("block C");}
A a= new A();
C(){
super();
System.out.println("C");
}
}
static class D {
D(){
System.out.println("D");
}
D(int number){
System.out.println("number:"+number);
}
}
public static void main(String[] args) {
new C();
}
}
运行的结果:
number:222
static A
number:22
static B
static C
block B
number:12
block A
A
B
block C
number:12
block A
A
C
理解:
类加载的时候首先执行的时本类中的静态成员变量和静态的代码块(静态的成员变量和静态的代码块是一个级别),静态修饰的有且只执行一次在开启项目的的时候。
每次在加载构造函数的时候,先加载次类的成员变量和模块代码块( 成员变量和模块代码块是一个级别),在执行构造函数
static D d = new D(222);
static {System.out.println("static A");}
static String aString1="20";
static D bb = new D(22);
D b=new D(12);
A(){System.out.println("A");}
{System.out.println("block A");}
static class B{
{System.out.println("block B");}
A a = new A();
static {System.out.println("static B");}
B(){System.out.println("B");}
B(int number){
System.out.println("number"+number);
}
}
static class C extends B{
static {System.out.println("static C");}
{System.out.println("block C");}
A a= new A();
C(){
super();
System.out.println("C");
}
}
static class D {
D(){
System.out.println("D");
}
D(int number){
System.out.println("number:"+number);
}
}
public static void main(String[] args) {
new C();
}
}
运行的结果:
number:222
static A
number:22
static B
static C
block B
number:12
block A
A
B
block C
number:12
block A
A
C
理解:
类加载的时候首先执行的时本类中的静态成员变量和静态的代码块(静态的成员变量和静态的代码块是一个级别),静态修饰的有且只执行一次在开启项目的的时候。
每次在加载构造函数的时候,先加载次类的成员变量和模块代码块( 成员变量和模块代码块是一个级别),在执行构造函数
本文详细解析了Java中类的加载与初始化过程,通过一个具体示例展示了静态成员变量、静态代码块以及非静态成员的加载顺序。特别关注了内部类及静态内部类的初始化流程。

被折叠的 条评论
为什么被折叠?



