新建一个类,里面含有静态代码块,非静态代码块以及构造函数
public class Parent {
private final static String TAG = "MainActivity";
static {
Log.e(TAG, "父类的静态代码块");
}
{
Log.e(TAG, "父类的非静态代码块");
}
public Parent() {
Log.e(TAG, "父类的构造方法");
}
}
new一个parent对象,
Parent parent= new Parent();
打印的log为
可以看到执行顺序为静态代码块→非静态代码块→构造函数,接着我们new两个对象
Parent parent1= new Parent();
Parent parent2= new Parent();
log为
可以看到静态代码块只执行了一次,而非静态代码块则执行了两次,且先于构造方法执行
这是因为静态代码块属于类,他在类被加载时自动调用,而非静态代码块则属于对象,他会在构造方法之前调用,做一些初始工作
那么我们接下来新建一个Child 继承Parent
public class Child extends Parent {
private final static String TAG = "MainActivity";
static {
Log.e(TAG, "子类的静态代码块");
}
{
Log.e(TAG, "子类的非静态代码块");
}
public Child() {
Log.e(TAG, "子类的构造方法");
}
new对象
Child child = new Child();
log为