1.类的定义
//在Scala中,类并不用声明为public。 //Scala源文件中可以包含多个类,所有这些类都具有公有可见性。 class Person { //用val修饰的变量是只读属性,有getter但没有setter //(相当与Java中用final修饰的变量) val id = "9527" //用var修饰的变量既有getter又有setter var age: Int = 18 //类私有字段,只能在类的内部使用 private var name: String = "唐伯虎" //对象私有字段,访问权限更加严格的,Person类的方法只能访问到当前对象的字段 private[this] val pet = "小强" }
2.构造器
注意:主构造器会执行类定义中的所有语句
/** *每个类都有主构造器,主构造器的参数直接放置类名后面,与类交织在一起 */ 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 } }
/** *构造器参数可以不带val或var,如果不带val或var的参数至少被一个方法所使用, *那么它将会被提升为字段 */ //在类名后面加private就变成了私有的 class Queen private(val name: String, prop: Array[String], private var age: Int = 18){ println(prop.size) //prop被下面的方法使用后,prop就变成了不可变得对象私有字段,等同于private[this] val prop //如果没有被方法使用该参数将不被保存为字段,仅仅是一个可以被主构造器中的代码访问的普通参数 def description = name + " is " + age + " years old with " + prop.toBuffer } object Queen{ def main(args: Array[String]) { //私有的构造器,只有在其伴生对象中使用 val q = new Queen("hatano", Array("蜡烛", "皮鞭"), 20) println(q.description()) } }