Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
6年前关闭。
因此,实例初始化程序块中的语句在该语句已存在之前已移至构造函数。
这是构造函数的实际外观(
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
6年前关闭。
public class A{
{
System.out.println("hi i am IIB");
}
public A(){
System.out.println("hi i am constructor");
}
public static void main(String... args){
A objA=new A();
}
}
最佳答案
在调用构造函数之前,iib将获得执行
不,这不会发生。实例初始化程序块中编写的代码仅在运行时才是构造函数的一部分。在编译时,编译器将实例初始化程序块的代码移至您的类的所有构造函数。因此,在运行时,构造函数实际上等效于:
public A() {
super();
System.out.println("hi i am IIB");
System.out.println("hi i am constructor");
}
因此,实例初始化程序块中的语句在该语句已存在之前已移至构造函数。
这是构造函数的实际外观(
javap
命令的输出): public A();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
7: ldc #3 // String hi i am IIB
9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
15: ldc #5 // String hi i am constructor
17: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
20: return
关于java - 非静态初始化程序块如何调用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20593606/
10-10 09:38