class Temp
{
{
System.out.println("this is in it block");
}
public static void main(String... s)
{
System.out.println("abhi");
}
}
上面的代码不会打印init块的内容,但我们知道init块是构造函数的第一行。
但另一方面,如果我使用new Temp();
,它会被打印出来。为什么这样?
如果构造函数在每个类中,上面的代码也应该在没有对象初始化的情况下打印它。不应该吗?
答案 0 :(得分:5)
您不需要在类中编写构造函数代码。如果您没有任何构造函数,系统将自动为您生成默认构造函数。你的内部块称为instance initializer;在构造函数执行之后,在构造函数中对super(...)
的任何调用之后以及构造函数体的(其余部分)之前运行之后运行。 (如果构造函数以对this(...)
的调用开始,则不会为该构造函数运行实例初始值设定项。)但是,您需要为构造函数和要执行的任何实例初始化程序创建类的实例。 (如果您创建了内部块static
,它将是一个静态初始化程序,并且在初始化类对象时将运行一次,无论是否创建了实例。)
答案 1 :(得分:1)
{ System.out.println("this is in it block");
}
为您创建的每个对象调用。即使您不创建对象,也会调用static {}。 有关详细信息,请参阅static-and-instance-initializers-in-java或static-and-instance-initializers-in-java。
答案 2 :(得分:0)
您好,如果您运行此代码您将了解实例块和静态块之间的区别。
它是第一个运行的静态块,只运行一次,第一次在实例启动时调用静态方法。就像在你的代码中你调用静态方法(main)一样,你应该创建一个静态块,但它只调用一次。
实例块,它始终运行它启动实例。
class Temp
{
{System.out.println("this is an instance block");}
static {System.out.println("this is a static block");}
public static void main(String... s){
System.out.println("This a static method");
Temp myTemp = new myTemp();
myTemp.myMethod();
}
void myMethod (){
System.out.println("This an instance method");
}
}
另一方面,如果你没有输入任何构造,Java会为你创建一个
Temp(){//Or whatever name of your class
super();
}
答案 3 :(得分:0)
您的代码中没有任何内容可以调用构造函数,因此实例init块也永远不会被调用。
如果构造函数在每个类中,上面的代码也应该在没有对象初始化的情况下打印它。不应该吗?
没有。为什么要这样?您必须调用才能实现此目的。它不会因为它存在而不会运行。