Scala类主体或主构造函数体

时间:2017-11-07 09:21:13

标签: scala oop

这是一个非常基本的问题。出于好奇,我想知道是否在下面的代码中:

class A(str: String) {
//body here...
}

是Scala Class主体还是主构造函数体或实例初始化器体(如Java)?

1 个答案:

答案 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
}