java静态块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码。不创建对象不执行该类的非静态代码块。顺序是静态块-->非静态块-->构造函数。
静态代码块只在第一次new时执行一次,而非静态代码块每new一次就执行一次。
父类:
package test;
public abstract class fu {
private int age;
public abstract void test();
static {
System.out.println("这是父类静态代码块");
}
public fu(){
System.out.println("这是父类构造函数");
}
{
System.out.println("这是父类非静态代码块");
}
}
子类:
package test;
public class zi extends fu{
static{
System.out.println("这是子类静态代码块");
}
public zi(){
System.out.println("这是子类构造函数");
}
{
System.out.println("这是子类非静态代码块");
}
@Override
public void test() {
System.out.println("这是子类方法");
}
}
Main函数
package test;
public class Main {
public static void main(String[] args) {
fu zi=new zi();
zi.test();
}
}
结果:
这是父类静态代码块
这是子类静态代码块
这是父类非静态代码块
这是父类构造函数
这是子类非静态代码块
这是子类构造函数
这是子类方法
原文:http://my.oschina.net/u/2265027/blog/498720