static{}(静态代码块)与{}(非静态代码块)的异同点(转自 べ袽猓柯苡づ)
static{}(静态代码块)与{}(非静态代码块)的异同点
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,
一般在代码块中对一些static变量进行赋值。
不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。
静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new
一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。
例:
//普通类 publicclass PuTong { public PuTong(){ System.out.print("默认构造方法!-->"); } //非静态代码块 { System.out.print("非静态代码块!-->"); } //静态代码块 static{ System.out.print("静态代码块!-->"); } publicstaticvoid test(){ { System.out.println("普通方法中的代码块!"); } } } //测试类 publicclass TestClass { /** * 区别两次new静态与非静态代码块执行情况 */ publicstaticvoid main(String[] args) { PuTong c1 = new PuTong(); c1.test(); PuTong c2 = new PuTong(); c2.test(); } } /* 运行输出结果是: 静态代码块!-->非静态代码块!-->默认构造方法!-->普通方法中的代码块! 非静态代码块!-->默认构造方法!-->普通方法中的代码块! */
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.
两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.
作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.