class="java"> 转载自:http://hi.baidu.com/dongaxis/item/9a8edc7057b8863771442303 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个, 一般在代码块中对一些static变量进行赋值。 不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new 一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。 例: //普通类 public classPuTong { publicPuTong(){ System.out.print("默认构造方法!-->"); } //非静态代码块 { System.out.print("非静态代码块!-->"); } //静态代码块 static{ System.out.print("静态代码块!-->"); } public static voidtest(){ { System.out.println("普通方法中的代码块!"); } } } //测试类 public classTestClass { /** * 区别两次new静态与非静态代码块执行情况 */ public static voidmain(String[] args) { PuTong c1 = newPuTong(); c1.test(); PuTong c2 = newPuTong(); c2.test(); } } /* 运行输出结果是: 静态代码块!-->非静态代码块!-->默认构造方法!-->普通方法中的代码块! 非静态代码块!-->默认构造方法!-->普通方法中的代码块! 更多请参考:http://blog.csdn.net/zhanghaipeng1989/article/details/8943509 */