小白最近在学Scala,发现网上大部分的视频讲解都讲的不是很全面的和清楚,于是自己倒腾了许久,终于把Scala的构造器原理给理解透了。
其实Scala中的构造器通Java一样,也是在创建对象时初始化实例,不过Scala中的构造器与Java中的又有些许不同,具体又有哪些东西呢,让我们来深入剖析一下。
基本语法
class 类名(形参列表) { // 主构造器
// 类体
def this(形参列表) { // 辅助构造器
}
def this(形参列表) { //辅助构造器可以有多个...
}
}
//1. 辅助构造器 函数的名称this, 可以有多个,编译器通过不同参数来区分,类似于Java中的重载方法
//2. 构造器有无参构造和有参构造,如果是无参构造的话可以省略小括号
基本用法
1.主构造器
创建无参主构造方法,并实例化
object Test {
def main(args: Array[String]): Unit = {
//调用主构造方法
val student = new Student11()
}
}
class Student11(){
var name: String = _
var age: Int = _
println("无参主构造方法被调用")
}
2.辅助构造器
创建辅助构造方法,(这里注意,辅助构造要有区别于主构造方法,或者其他方法)
object Test {
def main(args: Array[String]): Unit = {
//调用主构造方法
val student = new Student11()
val student1 = new Student11("alice")
}
}
class Student11(){
var name: String = _
var age: Int = _
println("无参主构造方法被调用")
//声明辅助构造方法
def this(name: String) {
//每个辅助构造方法必须调用主构造方法或者其他构造方法,this调用主构造方法
this
this.name = name
println(" 辅助构造方法被调用")
println(s"name: $name ,age: $age")
}
}
执行结果
"C:\Program Files\Java\jdk1.8.0_281\bin\java.exe" "-javaagent:D:\Program Files (x86)\JetBrains\IntelliJ IDEA 2021.1.1\lib\idea_rt.jar=60080:D:\Program Files (x86)\JetBrains\IntelliJ IDEA 2021.1.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_281\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_281\jre\lib\jfr.jar;C:\Pr