java静态块是在类加载时自动执行的,非静态代码块是在建立对象时自动执行的代码。不建立对象不执行该类的非静态代码块。顺序是静态块-->非静态块-->构造函数。java
静态代码块只在第一次new时执行一次,而非静态代码块每new一次就执行一次。ide
父类:函数
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(); } }
结果:code
这是父类静态代码块对象
这是子类静态代码块class
这是父类非静态代码块test
这是父类构造函数构造函数
这是子类非静态代码块方法
这是子类构造函数static
这是子类方法