我有一个简单的代码如下:
class TempClass
{
{
System.out.println("inside static...");
}
TempClass()
{
System.out.println("inside constructor...");
}
public static void main(String [] args)
{
new TempClass();
}
}
它显示输出为: 内部静态...... 内部构造函数......
但是当我评论实例创建行时,它会显示空白输出。 因此,只要调用构造函数,它就会充当静态块。 这是否意味着编写静态不是必需的(当实例化类时)?
任何人都知道这种行为吗?
答案 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 blocks
或initializer 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
块。如果它在那里,你可以运行并获得输出而不实例化