qq_千界_0
2018-06-11 10:04
//主函数
package com.java.CarRent;
public class Initial {
public static void main(String[] args) {
Son s=new Son();
}
}
//Parent 类
package com.java.CarRent;
public class Parent {
{
System.out.println("A");
}
static{
System.out.println("B");
}
public Parent(){
System.out.println("C");
}
}
//Son 类
package com.java.CarRent;
public class Son extends Parent{
{
System.out.println("D");
}
static{
System.out.println("E");
}
public Son(){
System.out.println("F");
}
}
//能不能解释一下答案 ,关键是其中的static初始化没理解
在一个不存在继承的类中:初始化static变量,执行static初始化快-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法
在一个存在继承的类中:初始化父类static成员变量,运行父类static初始化块-->初始化子类static成员变量,运行子类static初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普通初始化块-->子类构造方法。
注意:其中变量初始化(赋值)和初始化块的执行与相关语句在源码中的放置顺序一致,不过变量声明会最先执行
不懂的{}这个的,再补充下刚弄懂
static{...}是静态块,而只有{...}的是叫做构造块。
静态块在一个程序里面只执行一次;
而构造块是,只要建立一个对象,构造代码块都会执行一次。
静态块优先于主方法的执行,静态块优先于构造快,然后是构造方法的执行,而且只执行一次!
Java入门第二季
531399 学习 · 6328 问题
相似问题