
正文
java静态代码块,构造方法,初始化块的执行顺序
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
代码Parent和Sub进行讲解
public class Parent { private static final String name; public Parent() {
System.out.println("父类构造方法");
}
static{
name="hello parent";
System.out.println("父类静态块1");
}
static{
System.out.println("父类静态块2");
}
{
System.out.println("父类非静态块1");
}
{
System.out.println("父类非静态块2");
}}
public class Sub extends Parent{ public Sub() {
System.out.println("子类构造方法");
}
static{
System.out.println("子类静态块");
} {
System.out.println("子类非静态块");
}}
public class Test { public static void main(String[] args) {
Parent s1=new Sub();
Parent s2=new Sub();
}}
运行结果:父类静态块1
父类静态块2
子类静态块父类非静态块1
父类非静态块2
父类构造方法
子类非静态块
子类构造方法父类非静态块1
父类非静态块2
父类构造方法
子类非静态块
子类构造方法
结果:
父类静态代码块
子类静态代码块
----- 类加载时只调用一次
父类代码块
父类构造方法
子类代码块
子类构造方法
-----每次创建一个对象就调用一次
结论:
static修饰的代码块属于静态代码块属于类,加载时只调用一次;
非static修饰的代码块属于对象,每次创建对象都会运行非static修饰的代码块。
因为静态代码优先于非静态的代码,被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,
没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存,所以静态的会优先非静态的先执行






