日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

發布時間:2025/6/17 编程问答 28 豆豆

文章目錄

        • I . 主構造函數
        • II . 主構造函數聲明屬性
        • III . init 初始化代碼塊
        • IV . 主構造函數參數 和 成員變量訪問方式
        • V . 主構造函數 可見性 設置
        • VI . 次構造函數 ( 常用情況 )
        • VII . 次構造函數 ( 沒有主構造函數 )
        • VIII . 構造函數 代碼執行順序
        • IX . 調用 主構造函數 / 次構造函數 創建類實例對象



I . 主構造函數



1 . 構造函數個數 : Kotlin 類定義時需要指定主構造函數 , 還可以指定 0 ~ 多個次構造函數 ;


2 . 主構造函數定義 : 主構造函數與類定義在一起 , 構造函數定義在類名后 , 格式為 constructor( 構造函數參數列表 ) ;


3 . 主構造函數標準定義格式 : 主構造函數與 class 類名 定義在一次 , 緊跟在類名后面 ;

class 類名 constructor( 構造函數參數 ){//類成員 }

4 . 主構造函數省略 constructor 關鍵字定義格式 : 如果主構造函數 沒有 ① 可見性修飾符 或 ② 注解 , 可以省略該關鍵字 , 類名后面直接跟上構造函數的參數列表 ;

//主構造函數 : 省略了類名后的 constructor 關鍵字 class 類名 ( 構造函數參數 ){//類成員 }

5 . 主構造函數定義示例 :


① 標準格式的主構造函數 :

/*標準的主構造函數*/ class Student constructor(name : String, age : Int){ }

② 省略 constructor 關鍵字的主構造函數 :

/*省略 constructor 關鍵字的主構造函數省略 constructor 前提 :① 主構造函數沒有可見性修飾符 , 如 private , public , protected , internal② 主構造函數沒有注解*/ class Student (name : String, age : Int){ }

II . 主構造函數聲明屬性



在類中聲明屬性可以在類中使用 var / val 屬性名稱 : 屬性類型 聲明屬性 , 也可以在主構造函數中聲明屬性 ;


① 正常的主構造函數 : 構造函數是普通的構造函數 , 類屬性字段在類體中定義 ;

/*主構造函數中不聲明屬性 ; */ class Student constructor(name : String, age : Int){var name : String = namevar age : Int = age }

② 主構造函數中聲明屬性 : 在主構造函數中 , 可以直接聲明類中的屬性 , 下面的代碼 與 上面的代碼是等價的 ;

/*主構造函數中不聲明屬性 ; */ class Student constructor(var name : String, var age : Int){ }

III . init 初始化代碼塊



1 . init 代碼塊引入 : 主構造函數沒有函數體 , 不能執行任何代碼 ; 主構造函數的初始化相關操作可以放在 init 初始化代碼塊中 ;


2 . init 初始化代碼塊 : 一個類中可以定義多個 init 代碼塊 , 其執行順序是按照代碼順序從上到下執行 ;


3 . 代碼執行順序 : init 初始化代碼塊 , 與類的屬性定義優先級相同 , 在類對象實例初始化時 , 會按照在類中定義的順序 , 依次執行類屬性初始化和 init 初始化代碼塊 ;


4 . 代碼執行順序示例 : 類對象初始化時 , 代碼執行順序是 : 代碼 ① -> 代碼 ② -> 代碼 ③ -> 代碼 ④

class Student constructor(name : String, age : Int){//代碼 ① init {println("主構造函數參數 : name : ${name} , age : ${age} ;")}//代碼 ② : 等號右邊的 name 是構造函數參數值var name : String = name + " L"//代碼 ③ : 等號右邊的 age 是構造函數參數值var age : Int = age + 1//代碼 ④ init {println("成員變量 : name : ${this.name} , age : ${this.age} ; 主構造函數參數 name : ${name} , age : ${age} ;")} }

IV . 主構造函數參數 和 成員變量訪問方式



1 . 主構造函數參數訪問性 : 可以在 類屬性字段初始化賦值 init 初始化代碼塊中 訪問主構造函數中的參數變量值 ;


2 . 兩種變量的訪問方式 : 如果構造函數 與 成員變量重名 , 使用 this.變量名 訪問的是成員變量 , 使用 變量名 訪問的是 構造函數參數變量 ;


3 . 構造函數參數 與 成員變量訪問 示例代碼及解析 :


① 構造函數參數訪問 : 使用 name 和 age , 訪問的是構造函數的參數 , 不能訪問成員變量 ;

② 成員變量訪問 : 使用 this.name 和 this.age 才能訪問對象的成員變量 ;


class Student constructor(name : String, age : Int){init {println("主構造函數參數 : name : ${name} , age : ${age} ;")}//等號右邊的 name 是構造函數參數值var name : String = name + " L"//等號右邊的 age 是構造函數參數值var age : Int = age + 1init {println("成員變量 : name : ${this.name} , age : ${this.age} ; 主構造函數參數 name : ${name} , age : ${age} ;")} }fun main() {var student : Student = Student("Tom" , 18) }

執行結果 :

主構造函數參數 : name : Tom , age : 18 ; 成員變量 : name : Tom L , age : 19 ; 主構造函數參數 name : Tom , age : 18 ;

V . 主構造函數 可見性 設置



1 . 構造函數可見性 : 主構造函數默認是 public 可見性 , 如果將該構造函數設置成 private , 那么 constructor 關鍵字必須要有 ;

class 類名 private constructor( 構造函數參數 ){//類成員 }

2 . 可見性修飾符 :


① private : 類內部可見 , 所有其它類不可見 , 包括子類 ;

② protected : 本類 和 子類可見 , 其它類不可見 ;

③ internal : 本模塊內 可見 ;

④ public : 所有類都可見 ;



VI . 次構造函數 ( 常用情況 )



1 . 次構造函數格式 :

constructor ( 構造函數參數列表 ) : this ( 主構造函數參數列表 ){//次構造函數體 }

2 . 次構造函數委托主 :


① 委托方式 : 使用 : this ( 被委托的構造函數參數列表 ) 方式 , 直接或間接委托給主構造函數 ;

② 直接委托 : 每個次構造函數必須委托給主構造函數 ( 直接委托主構造函數 ) ,

③ 間接委托 : 委托給其它次構造函數 ( 間接委托主構造函數 ) ;



VII . 次構造函數 ( 沒有主構造函數 )



如果類沒有主構造函數 , 那么可以直接聲明 次構造函數 , 不同委托給主構造函數 ;

class Person {constructor ( 次構造函數參數列表 ) {//次構造函數體} }

VIII . 構造函數 代碼執行順序



1 . 代碼執行順序 : 先執行主構造函數 , 此時會初始化成員屬性 與 執行 init 初始化代碼塊 , 然后執行次構造函數內容 ;


2 . 初始化代碼塊 : init 代碼塊等同于主構造函數的函數體 , 當次構造函數將操作委托給主構造函數時 , 會先執行 init 初始化代碼塊 , 然后再運行次構造函數體 ;



IX . 調用 主構造函數 / 次構造函數 創建類實例對象



1 . 創建實例對象 : Kotlin 中沒有 new 關鍵字 , 使用 類名 ( 構造函數參數列表 ) 方式 , 創建類對象實例 ;


2 . 示例代碼 :

package construct/*標準的主構造函數*/ class Student constructor(name : String, age : Int){init {println("主構造函數參數 : name : ${name} , age : ${age} ;")}//等號右邊的 name 是構造函數參數值var name : String = name + " L"//等號右邊的 age 是構造函數參數值var age : Int = age + 1init {println("成員變量 : name : ${this.name} , age : ${this.age} ; 主構造函數參數 name : ${name} , age : ${age} ;")}//身高成員變量var height : Int = 0;constructor(name : String, age : Int, height : Int) : this(name, age){this.height = height}override fun toString(): String {return "Student(name='$name', age=$age, height=$height)"}}/*省略 constructor 關鍵字的主構造函數省略 constructor 前提 :① 主構造函數沒有可見性修飾符 , 如 private , public , protected , internal② 主構造函數沒有注解*/ class Student1 (name : String, age : Int){ }fun main() {//調用主構造函數var student : Student = Student("Tom" , 18)println(student)//調用次構造函數var student2 = Student("Jerry", 18, 165)println(student2)}

3 . 執行結果 :

主構造函數參數 : name : Tom , age : 18 ; 成員變量 : name : Tom L , age : 19 ; 主構造函數參數 name : Tom , age : 18 ; Student(name='Tom L', age=19, height=0) 主構造函數參數 : name : Jerry , age : 18 ; 成員變量 : name : Jerry L , age : 19 ; 主構造函數參數 name : Jerry , age : 18 ; Student(name='Jerry L', age=19, height=165)

總結

以上是生活随笔為你收集整理的【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。