package keng;
class test1{
public test1(){
System.out.println("test1 init");
}
{
System.out.println("test1");
}
static{
System.out.println("static test1");
}
class test1{
public test1(){
System.out.println("test1 init");
}
{
System.out.println("test1");
}
static{
System.out.println("static test1");
}
}
package keng;
class test2 extends test1{
public test2(){
System.out.println("test2 init");
}
{
System.out.println("test2");
}
static{
System.out.println("static test2");
}
public static void main(String[] args) {
test2 test = new test2();
}
}
/*说明: 1.不管什么情况,静态代码块先执行,先执行父类的,后执行子类的;
2.直接用大括号包含的的语句称作程序块,是类对象实例化前先要执行的一些初始化操作;
3.创建子类对象时,先实例化父类对象,所以先调用父类的构造函数,再调用自己类的构造函数;
基于以上的规则,输出的结果是:
static test1
static test2
test1
test1 init
test2
test2 init
*/