Scala的构造器
注意:主构造器会执行类定义中的所有语句
实例一
/**
*每个类都有主构造器,主构造器的参数直接放置类名后面,与类交织在一起
*/
class Student(val name: String, val age: Int){
//主构造器会执行类定义中的所有语句
println("执行主构造器")
try {
println("读取文件")
throw new IOException("io exception")
} catch {
case e: NullPointerException => println("打印异常Exception : " + e)
case e: IOException => println("打印异常Exception : " + e)
} finally {
println("执行finally部分")
}
private var gender = "male"
//用this关键字定义辅助构造器
def this(name: String, age: Int, gender: String){
//每个辅助构造器必须以主构造器或其他的辅助构造器的调用开始
this(name, age)
println("执行辅助构造器")
this.gender = gender
}
}
实例二
package pricate
/*构造器参数可以不带val或var,
如果不带val或var的参数至少被一个方法所使用
那么它将会被提升为地段
*/
//在类名后面加private就变成了私有的
class Queen private
(val name:String,prop:Array[String],private var age:Int=18){
println(prop.size)
/*
1.prop被下面的方法使用后,prop就变成不可变的对象私有字段,
等同于private[this] val prop
2.如果没有被方法使用该参数将不被保存为字段,
仅仅是一个可以被主构造器中的代码访问的普通参数
*/
def description =name +"is"+age+"years old with"+prop.toBuffer
}
object Queen{
def main(args: Array[String]): Unit = {
//私有的构造器,只有在其他伴生对象中使用
val q=new Queen("hahd",Array("小猪猪","大坏蛋"),20)
println(q.description)
}
}