<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Kotlin 構造器 > 原文: [https://www.programiz.com/kotlin-programming/constructors](https://www.programiz.com/kotlin-programming/constructors) #### 在本文中,您將通過示例了解 Kotlin 中的構造器(主要構造器和輔助構造器)以及初始化塊。 構造器是初始化類屬性的簡潔方法。 它是一個特殊的成員函數,在實例化(創建)對象時調用。 但是,它們在 Kotlin 中的工作方式略有不同。 在 Kotlin 中,有兩個構造器: * **主要構造器** - 初始化類的簡潔方法 * **輔助構造器** - 允許您放置其他初始化邏輯 * * * ## 主要構造器 主構造器是類標頭的一部分。 這是一個例子: ```kt class Person(val firstName: String, var age: Int) { // class body } ``` 用括號括起來的代碼塊是主要的構造器:`(val firstName: String, var age: Int)`。 構造器聲明了兩個屬性:`firstName`(使用關鍵字`val`聲明的只讀屬性)和`age`(使用關鍵字`var`聲明的讀寫屬性)。 * * * ### 示例:主要構造器 ```kt fun main(args: Array<String>) { val person1 = Person("Joe", 25) println("First Name = ${person1.firstName}") println("Age = ${person1.age}") } class Person(val firstName: String, var age: Int) { } ``` 運行該程序時,輸出為: ```kt First Name = Joe Age = 25 ``` 創建`Person`類的對象時,就像`Person`是一個函數一樣,傳遞`"Joe"`和`25`值。 這會將`person1`對象的`firstName`和`age`屬性分別初始化為`"Joe"`和`25`。 * * * 還有其他使用主要構造器的方法。 * * * ### 主構造器和初始化塊 主構造器的語法受約束,不能包含任何代碼。 為了放置初始化代碼(不僅是用于初始化屬性的代碼),使用了初始化塊。 它以`init`關鍵字為前綴。 讓我們使用初始化塊修改以上示例: ```kt fun main(args: Array<String>) { val person1 = Person("joe", 25) } class Person(fName: String, personAge: Int) { val firstName: String var age: Int // initializer block init { firstName = fName.capitalize() age = personAge println("First Name = $firstName") println("Age = $age") } } ``` 運行該程序時,輸出為: ```kt First Name = Joe Age = 25 ``` 在此,當創建`person1`對象時,括號內的參數`fName`和`personAge`分別接受值`"Joe"`和`25`。 但是,不使用`var`或`val`而使用`fName`和`personAge`,它們不是`Person`類的屬性。 `Person`類具有兩個屬性`firstName`,并且聲明了`age`。 創建`person1`對象時,將執行初始化塊內的代碼。 初始化塊不僅初始化其屬性,還打印它們。 * * * 這是執行相同任務的另一種方法: ```kt fun main(args: Array<String>) { val person1 = Person("joe", 25) } class Person(fName: String, personAge: Int) { val firstName = fName.capitalize() var age = personAge // initializer block init { println("First Name = $firstName") println("Age = $age") } } ``` * * * 為了區分構造器參數和屬性,使用了不同的名稱(`fName`和`firstName`,以及`personAge`和`age`)。 對于構造器參數,使用`_firstName`和`_age`更為常見。 例如: ```kt class Person(_firstName: String, _age: Int) { val firstName = _firstName.capitalize() var age = _age // initializer block init { ... .. ... } } ``` * * * ### 主構造器中的默認值 您可以為構造器參數提供默認值(類似于為函數提供[默認參數)。 例如:](https://www.programiz.com/kotlin-programming/default-named-arguments) ```kt fun main(args: Array<String>) { println("person1 is instantiated") val person1 = Person("joe", 25) println("person2 is instantiated") val person2 = Person("Jack") println("person3 is instantiated") val person3 = Person() } class Person(_firstName: String = "UNKNOWN", _age: Int = 0) { val firstName = _firstName.capitalize() var age = _age // initializer block init { println("First Name = $firstName") println("Age = $age\n") } } ``` 運行該程序時,輸出為: ```kt First Name = Joe Age = 25 person2 is instantiated First Name = Jack Age = 0 person3 is instantiated First Name = UNKNOWN Age = 0 ``` * * * ## Kotlin 二級構造器 在 Kotlin 中,一個類還可以包含一個或多個輔助構造器。 它們是使用`constructor`關鍵字創建的。 二級構造器在 Kotlin 中并不常見。 當您需要擴展一個提供多個以不同方式初始化該類的構造器的類時,就會出現輔助構造器的最常見用法。 在學習之前,請務必檢查 [Kotlin 繼承](/kotlin-programming/inheritance "Kotlin Inheritance")。 這是您可以在 Kotlin 中創建輔助構造器的方法: ```kt class Log { constructor(data: String) { // some code } constructor(data: String, numberOfData: Int) { // some code } } ``` 此處,`Log`類具有兩個輔助構造器,但沒有主要構造器。 您可以將類擴展為: ```kt class Log { constructor(data: String) { // code } constructor(data: String, numberOfData: Int) { // code } } class AuthLog: Log { constructor(data: String): super(data) { // code } constructor(data: String, numberOfData: Int): super(data, numberOfData) { // code } } ``` 在此,派生類`AuthLog`的構造器調用基類`Log`的相應構造器。 為此,使用`super()`。 ![Calling constructor of base class from derived class.](https://img.kancloud.cn/80/94/80948299b4d1e437a23b709ff4ece3df_550x206.png) 在 Kotlin 中,您還可以使用`this()`從相同類的另一個構造器(如 Java 中)調用構造器。 ```kt class AuthLog: Log { constructor(data: String): this(data, 10) { // code } constructor(data: String, numberOfData: Int): super(data, numberOfData) { // code } } ``` ![Calling constructor from the same class.](https://img.kancloud.cn/5e/19/5e19a278f941b86fd5952112c5b65c85_550x206.png) * * * ### 示例:Kotlin 二級構造器 ```kt fun main(args: Array<String>) { val p1 = AuthLog("Bad Password") } open class Log { var data: String = "" var numberOfData = 0 constructor(_data: String) { } constructor(_data: String, _numberOfData: Int) { data = _data numberOfData = _numberOfData println("$data: $numberOfData times") } } class AuthLog: Log { constructor(_data: String): this("From AuthLog -> " + _data, 10) { } constructor(_data: String, _numberOfData: Int): super(_data, _numberOfData) { } } ``` 運行該程序時,輸出為: ```kt From AuthLog -> Bad Password: 10 times ``` **注意**:如果該類沒有主構造器,則輔助構造器必須初始化基類或委托給另一個構造器(如上例所示)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看