匿名块的作用类似于静态块

时间:2013-08-05 12:18:58

标签: java

我有一个简单的代码如下:

class TempClass 
{  
    {    
        System.out.println("inside static...");
    }

    TempClass()
    {
        System.out.println("inside constructor...");
    }

    public static void main(String [] args)
    {
        new TempClass();
    }
}

它显示输出为: 内部静态...... 内部构造函数......

但是当我评论实例创建行时,它会显示空白输出。 因此,只要调用构造函数,它就会充当静态块。 这是否意味着编写静态不是必需的(当实例化类时)?

任何人都知道这种行为吗?

4 个答案:

答案 0 :(得分:8)

{
      System.out.println("inside static...");
}

...不是static块,它是一个实例块。

static {
      System.out.println("inside static...");
}

...将是static块。

答案 1 :(得分:6)

{
  System.out.println("inside static...");
}

静态块,而不是实例块,它会被转换为类似

class TempClass
{  
    TempClass()
    {
        {

           System.out.println("inside static...");
        }
        System.out.println("inside constructor...");
    }
}

答案 2 :(得分:1)

不是static block。 没有static关键字的区块称为instance blocksinitializer blocks Java编译器将初始化程序块复制到每个构造函数中 请参阅java docs

  

实例变量的初始化程序块看起来就像静态初始化程序块,但没有静态关键字:

在java中使用构造函数初始化实例变量有两种选择:初始化块和最终方法 使用初始化程序块

class Whatever {
   private int myVar ;
   {
     // initialization code goes here
      myvar = 10;
   }
}

使用最终方法。

class Whatever {
  private int myVar = initializeInstanceVariable();

  protected final int initializeInstanceVariable() {

    // initialization code goes here
    return 10;
  }

}

答案 3 :(得分:1)

实际上代码中没有static块。如果它在那里,你可以运行并获得输出而不实例化