欢迎来到码农小陈的博客

static代码块与{}代码块的比较

第一个例子:

public class StaticDemo {
    {
        System.out.println("{} 代码块");
    }
    static{
        System.out.println("static 代码块");
    }
    
    public static void main(String[] args) {
        
    }

}
static 代码块
View Code

      结论:类的加载会执行static代码块,不会执行{}代码块。

第二个例子:

public class StaticDemo2 {
    
    {
        System.out.println("{} 代码块");
    }
    
    static{
        System.out.println("static 代码块");
    }
    
    public static void main(String[] args) {
        new StaticDemo2();
    }

}
static 代码块
{} 代码块
View Code

     结论: new一个类的实例,会先执行static代码块,再执行{}代码块。

第三个例子:

public class StaticDemo3 {
    
  public StaticDemo3(){
        System.out.println("构造函数");
    }
 
    {
        System.out.println("{} 代码块");
    }
    static{
        System.out.println("static 代码块");
    }
    
    public static void main(String[] args) {
        new StaticDemo3();
    }

}
static 代码块
{} 代码块
构造函数
View Code

      结论:new一个类的实例,会先执行static代码块,再执行{}代码块,最后执行构造函数。

第四个例子:

public class StaticDemo4 {
    
  public StaticDemo4(){
        System.out.println("构造函数");
    }
 
    {
        System.out.println("{} 代码块");
    }
    static{
        System.out.println("static 代码块");
    }
    
    public static void main(String[] args) {
        new StaticDemo4();
        new StaticDemo4();
    }

}
static 代码块
{} 代码块
构造函数
{} 代码块
构造函数
View Code

      总结:static{}代码块,会在类初次被加载的时候被执行一次。{}代码块和构造函数一样,每次new一个对象都会被执行。

 

注:当有多个带不同参数的构造函数需要执行相同的初始化代码,可以将这些代码提起出来放在{}代码块中。

posted on 2015-12-30 10:13  码农小陈  阅读(416)  评论(0编辑  收藏  举报

导航