属性初始化时间

  1. package com.chiato.chapter6
  2. object Test05_Constructor {
  3. def main(args: Array[String]): Unit = {
  4. new Student()
  5. println("==================")
  6. new Student("new chiato")
  7. }
  8. }
  9. class Student() {
  10. println("this is main constructor")
  11. // 先打印,还未初始化
  12. println(f"name=$name")
  13. var name = "chiato"
  14. var age = 18
  15. def this(name: String) {
  16. this()
  17. println("this is the 辅助构造器")
  18. this.name = name
  19. println(f"name=$name")
  20. }
  21. }

此时输出结果为
image.png

调整主构造器位置后:

package com.chiato.chapter6

object Test05_Constructor {
  def main(args: Array[String]): Unit = {
    new Student()

    println("==================")
    new Student("new chiato")
  }
}

class Student() {
  println("this is main constructor")
  var name = "chiato"
  var age = 18
  // 调整该行位置后
  println(f"name=$name")

  def this(name: String) {
    this()
    println("this is the 辅助构造器")
    this.name = name
    println(f"name=$name")
  }


}

输出结果为:
image.png

主构造器中形参直接作属性

Scala类的主构造器形参 包括三种类型:未用任何修饰、var修饰、val修饰
(1)未用任何修饰符修饰,这个参数就是一个局部变量
(2)var修饰参数,作为类的公有成员属性使用,可以修改
(3)val修饰参数,作为类的私有只读属性使用,不能修改

package com.chiato.chapter6

object TestAccess {
  def main(args: Array[String]): Unit = {
    var p:Person = new Person("bob", "男", 18)

    p.name = "alias"
    p.gender = "女"

    println(f"gender = ${p.gender} name = ${p.name} age = ${p.age}")

  }

}

class Person(var name: String, val gender: String, age: Int) {
}

image.png