相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个, 一般在代码块中对一些static变量进行赋值。 不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new 一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。 例: //普通类 public class PuTong { public PuTong(){ System.out.print("默认构造方法!-->"); }
//非静态代码块 { System.out.print("非静态代码块!-->"); }
//静态代码块 static{ System.out.print("静态代码块!-->"); }
public static void test(){ { System.out.println("普通方法中的代码块!"); } } }
//测试类 public class TestClass {
/** * 区别两次new静态与非静态代码块执行情况 */ public static void main(String[] args) { PuTong c1 = new PuTong(); c1.test();