Java類具備能夠帶參數的構造器,而Scala類能夠直接帶參數。Scala的寫法更簡潔——類參數能夠直接在類的主體中使用;不必定義字段而後寫賦值函數把構造器的參數複製到字段裏。這能夠潛在地節省不少固定寫法,尤爲是對小類來講。 ide
Scala編譯器將把你放在類內部的任何不是字段的部分或者方法定義的代碼,編譯進主構造器。例如,你能夠像這樣打印輸出一條除錯消息: 函數
class Rational(n: Int, d: Int) { println("Created "+n+"/"+d) }
根據這個代碼,Scala編譯器將把println調用放在Rational的主構造器。所以,println調用將在每次建立一個新的Rational實例時打印這條除錯信息。 ui
使用require方法對參數進行先決條件檢測 this
class Rational(n: Int, d: Int) { require(d != 0) override def toString = n +"/"+ d }
require方法帶一個布爾型參數。若是傳入的值爲真,require將正常返回。反之,require將經過拋出IllegalArgumentException來阻止對象被構造。 scala
從構造器,Scala的從構造器開始於def this(...)。每個從構造器的第一個動做都是調用同一個類裏面其餘的構造器。換句話說就是,每一個Scala類裏的每一個從構造器都是以「this(...)」形式開頭的。 設計
若你熟悉Java,你或許會奇怪爲何Scala構造器的規矩比Java的還要大。Java裏,構造器的第一個動做必需要麼調用同類裏的另外一個構造器,要麼直接調用超類的構造器。Scala的類裏面,只有主構造器能夠調用超類的構造器。Scala裏更嚴格的限制其實是權衡了更高的簡潔度和與Java構造器相比的簡易性所付出的代價以後做出的設計。 code