Kotlin關鍵字二——constructor和init

在關鍵字一——var和val中最后提到了構造函數,這里就學習下構造函數相關的關鍵字: constructor和init。

主要構造(primary constructor)

kotlin和java一樣,在定義類時就自動生成了無參構造

// 會生成默認的無參構造函數
class Person{
}

與java不同的是,當kotlin的構造函數中必須帶參數時,則需要在類名后面直接添加參數:

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

這種在類名后面添加參數(包含無參)的構造方法就稱為主要構造(primary constructor)

次要構造(secondary constructor)

當類包含多個構造函數時,需要通過次要構造實現, 次要構造需要用constructor關鍵字修飾:

// primary constructor
class Person(var age: Int, var name: String) {// secondary constructorconstructor(name: String) : this(18, name = name)
}

次要構造使用上需要注意:

  • 次要構造需要直接或間接調用主要構造
    // primary constructor
    class Person(var age: Int, var name: String) {// 會提示: Primary constructor call expectedconstructor(name: String)
    }
    
  • 次要構造中不能聲明類的屬性,即不能使用var或val
    class Person(var age: Int, var name: String) {constructor(name: String) : this(age = 18, name)// 提示'var' on secondary constructor parameter is not allowedconstructor(var address:String, name: String):this(name)
    }
    

init

kotlin提供了一個方法init,當有多個構造方法,無論使用哪個構造方法都會調用到init方法:

// 調用 Person("xiao ming")或者 Person(16, "小明")后 都會輸出
// I am a person
class Person(var age: Int, var name: String) {constructor(name: String) : this(age = 18, name)init {System.out.println("I am a person")}
}

可以看下實現原理:

public final class Person {public Person(int age, @NotNull String name) {super();this.age = age;this.name = name;// init方法System.out.println("I am a person");}public Person(@NotNull String name) {this(18, name);}
}

可以看到kotlin構造的執行順序是
主構造——>init()——>次要構造

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209341.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

configure腳本的常用參數

下面是一些常用的configure選項參數及其解釋&#xff1a; --prefix<directory>&#xff1a;指定安裝目錄--with-<package>&#xff1a;指定依賴的外部庫或軟件包--enable-<feature>&#xff1a;啟用某個特性--disable-<feature>&#xff1a;禁用某個特…

原創 | 數據的確權、流通、入表與監管研究(一):數據與確權

作者&#xff1a;張建軍&#xff0c;中國電科首席專家&#xff0c;神州網信技術總監 本文約7100字&#xff0c;建議閱讀10分鐘 本文主要介紹數據與數據分類、數據確權規則、數據的所有權與其他權利等方面內容&#xff0c;并進行案例分析。 2022年12月發布的《關于構建數據基礎制…

Linux 和 macOS 的主要區別在哪幾個方面呢?

(??? )&#xff0c;Hello我是祐言QAQ我的博客主頁&#xff1a;C/C語言&#xff0c;數據結構&#xff0c;Linux基礎&#xff0c;ARM開發板&#xff0c;網絡編程等領域UP&#x1f30d;快上&#x1f698;&#xff0c;一起學習&#xff0c;讓我們成為一個強大的攻城獅&#xff0…

uniapp實戰 —— 彈出層 uni-popup (含vue3子組件調父組件的方法)

效果預覽 彈出的內容 src\pages\goods\components\ServicePanel.vue <script setup lang"ts"> // 子組件調父組件的方法 const emit defineEmits<{(event: close): void }>() </script><template><view class"service-panel"…

ALSA Compress-Offload API

概述 從 ALSA API 的早期開始&#xff0c;它就被定義為支持 PCM&#xff0c;或考慮到了 IEC61937 等固定比特率的載荷。參數和返回值以幀計算是常態&#xff0c;這使得擴展已有的 API 以支持壓縮數據流充滿挑戰。 最近這些年&#xff0c;音頻數字信號處理器 (DSP) 常常被集成…

git如何配置多個遠程倉庫,并且進行切換

一、配置多個遠程倉庫并進行切換&#xff0c;請按照以下步驟進行操作&#xff1a; 打開命令行終端&#xff0c;并進入您的 Git 倉庫所在的目錄。添加第一個遠程倉庫&#xff0c;使用以下命令&#xff1a;git remote add origin <第一個遠程倉庫的 URL>這里將遠程倉庫命名…

C# .NET平臺提取PDF表格數據,并轉換為txt、CSV和Excel表格文件

處理PDF文件中的內容是比較麻煩的事情&#xff0c;特別是以表格形式呈現的各種數據。為了充分利用這些寶貴的數據資源&#xff0c;我們可以通過程序提取PDF文件中的表格&#xff0c;并將其保存為更易于處理和分析的格式&#xff0c;如txt、csv、xlsx&#xff0c;從而更方便地對…

leetcode面試經典150題——35 螺旋矩陣

題目&#xff1a; 螺旋矩陣 描述&#xff1a; 給你一個 m 行 n 列的矩陣 matrix &#xff0c;請按照 順時針螺旋順序 &#xff0c;返回矩陣中的所有元素。 示例&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;[1,2,3,6,9,8,7,4,5] 提示&…

Redis Geo操作地理位置

Redis Geo 使用場景API列表名詞API列表Springboot使用mavenyamlTest 注意事項 Redis Geo 是Redis在3.2版本中新增的功能&#xff0c;用于存儲和操作地理位置信息 使用場景 滴滴打車&#xff1a;這是一個對地理位置精度要求較高的場景。通過使用Redis的GEO功能&#xff0c;滴滴…

12月8日作業

使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數&#xff1b;將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷u界面上輸入的賬號是否為"admin"&#xff0c;…

kafka學習筆記--安裝部署、簡單操作

本文內容來自尚硅谷B站公開教學視頻&#xff0c;僅做個人總結、學習、復習使用&#xff0c;任何對此文章的引用&#xff0c;應當說明源出處為尚硅谷&#xff0c;不得用于商業用途。 如有侵權、聯系速刪 視頻教程鏈接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;從入門到調優…

Day54力扣打卡

打卡記錄 出租車的最大盈利&#xff08;動態規劃&#xff09; 鏈接 class Solution:def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int:d defaultdict(list)for start, end, w in rides:d[end].append((start, end - start w))f [0] * (n 1)for i in…

文章解讀與仿真程序復現思路——電力自動化設備EI\CSCD\北大核心《考慮源網荷效益的峰谷電價與峰谷時段雙層優化模型》

這個標題涉及到電力定價和能源效益的優化模型。讓我來分解一下&#xff1a; 峰谷電價&#xff1a;這是一種電力定價策略&#xff0c;即在一天內不同時間段設定不同的電價。通常&#xff0c;高峰時段&#xff08;需求高&#xff09;的電價相對較高&#xff0c;而低谷時段&#x…

人工智能學習9(LightGBM)

編譯工具&#xff1a;PyCharm 文章目錄 編譯工具&#xff1a;PyCharm lightGBM原理lightGBM的基礎使用案例1&#xff1a;鳶尾花案例2&#xff1a;絕對求生玩家排名預測一、數據處理部分1.數據獲取及分析2.缺失數據處理3.數據規范化4.規范化輸出部分數據5.異常數據處理5.1刪除開…

利用私域運營的四大策略實現企業營銷目標

私域運營指的是企業利用各種網絡技術和工具&#xff0c;以自己的平臺為基礎&#xff0c;建立、維護、更新和升級與用戶的私人關系。這種運營模式讓企業能更準確地了解客戶需求和喜好&#xff0c;通過定制化服務、優惠政策、個性化體驗等方式&#xff0c;獲取更多的客戶價值。相…

Child Mind Institute - Detect Sleep States(2023年第一次Kaggle拿到了銀牌總結)

感謝 感謝艾兄&#xff08;大佬帶隊&#xff09;、rich師弟&#xff08;師弟通過這次比賽機械轉碼成功、耐心學習&#xff09;、張同學&#xff08;也很有耐心的在學習&#xff09;&#xff0c;感謝開源方案&#xff08;開源就是銀牌&#xff09;&#xff0c;在此基礎上一個月…

基于Lucene的全文檢索系統的實現與應用

文章目錄 一、概念二、引入案例1、數據庫搜索2、數據分類3、非結構化數據查詢方法1&#xff09; 順序掃描法(Serial Scanning)2&#xff09;全文檢索(Full-text Search) 4、如何實現全文檢索 三、Lucene實現全文檢索的流程1、索引和搜索流程圖2、創建索引1&#xff09;獲取原始…

模板與泛型編程

函數模板 顯示實例化 區別定義與聲明 T是模板形參 int是模板實參 inpunt是函數形參 3是函數實參 顯示實例化 模板必須實例化可見 翻譯單元一處定義原則 與內聯函數異同 引入原因&#xff1a;函數模板是為了編譯器兩個階段的處理 內聯函數是為了能在編譯期展開 模板實參的類…

Android Kotlin語言下的文件存儲

目錄 將數據存儲到文件中 創建文件和保存數據 讀取文件 SharedPreferences存儲 存儲數據到SharedPreferences中 Context類中的getSharedPreferences()方法 Activity類中的getPreferences()方法 從SharedPreferences中讀取數據 SQLite數據庫存儲 創建數據庫 調用數據…

Java導出word

原文地址 傳入的值不能為null,否則會報錯&#xff0c;IXDocReport 有自己的判null規則&#xff0c;比較麻煩&#xff0c;建議代碼直接把null替換成"" public void exportWord1(WeeklyMeetDataDto dto, HttpServletResponse response) {ServletOutputStream downLoad…