static{}静态代码块与{}普通代码块之间的区别

转载自:http://blog.csdn.net/aledavvv/article/details/16920743

static{}(静态代码块){}(非静态代码块)的异同点

相同点:都是在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();
        
        PuTong c2 =  new  PuTong();
        
c2.test();
    }
}

/*
运行输出结果是:
静态代码块! --> 非静态代码块! --> 默认构造方法! --> 普通方法中的代码块!
非静态代码块! --> 默认构造方法! --> 普通方法中的代码块!

*/

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.

两者的区别就是:静态代码块是自动执行的;

静态方法是被调用的时候才执行的. 

作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.



猜你喜欢

转载自blog.csdn.net/qq_37150783/article/details/79617675