这是一个非常基本的问题。出于好奇,我想知道是否在下面的代码中:
class A(str: String) {
//body here...
}
是Scala Class主体还是主构造函数体或实例初始化器体(如Java)?
答案 0 :(得分:3)
是Scala Class主体还是主构造函数体或实例初始化体?
这是班级的身体。在调用构造函数时,将初始化需要初始化的开括号和右括号之间定义的任何内容。
例如,如果我们在正文中添加println
语句,我们会在调用构造函数时立即执行它:
class A(str: String) {
println("inside body")
}
new A("hello")
关于发出的JVM类,我们可以看到代码的主体被提升到类的构造函数:
public class A$1 {
public A$1(java.lang.String);
Code:
0: aload_0
1: invokespecial #17 // Method java/lang/Object."<init>":()V
4: getstatic #23 // Field scala/Predef$.MODULE$:Lscala/Predef$;
7: ldc #25 // String inside body
9: invokevirtual #29 // Method scala/Predef$.println:(Ljava/lang/Object;)V
12: return
}