java静态代码块、静态变量、普通代码块和构造方法执行顺序 |
您所在的位置:网站首页 › java类实例化执行顺序 › java静态代码块、静态变量、普通代码块和构造方法执行顺序 |
静态代码块和静态变量在使用到该类时就会初始化,要早于对象的初始化静态变量和静态代码块执行的顺序取决于它们在代码中的顺序普通代码块只有在创建对象时会执行,并且执行顺序优先于构造方法执行顺序:静态代码块和静态变量 -> 普通代码块 -> 构造方法
public class Parent {
static String name = "parent";
static {
System.out.println("Parent静态代码块,name=" + name);
}
Parent() {
System.out.println("Parent构造方法");
}
{
System.out.println("Parent普通代码块");
}
public static void main(String[] args) {
Parent parent = new Parent();
}
}
运行结果: >>Parent静态代码块,name=parent >>Parent普通代码块 >>Parent构造方法在上面示例中,如果变量name的定义在static{}代码块下面,则编译就会报错,这也侧面证明了静态变量和静态代码块是根据代码中的位置来决定初始化顺序的 子类和父类中静态变量、静态代码块、普通代码块、构造方法的执行顺序: -> 父类静态代码块/静态变量-> 子类静态代码块/静态变量-> 父类普通代码块-> 父类构造方法-> 子类普通代码块-> 子类构造方法 public class Parent { static String name = "parent"; static { System.out.println("Parent静态代码块,name=" + name); } Parent() { System.out.println("Parent构造方法"); } { System.out.println("Parent普通代码块"); } static class Child extends Parent{ static String name = "child"; static { System.out.println("Child静态代码块,name=" + name); } Child() { System.out.println("Child构造方法"); } { System.out.println("Child普通代码块"); } } public static void main(String[] args) { Child child = new Child(); } }运行结果: >>Parent静态代码块,name=parent >>Child静态代码块,name=child >>Parent普通代码块 >>Parent构造方法 >>Child普通代码块 >>Child构造方法 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |