我是IT王魔王
這是我的第7篇IT系列原創(chuàng)
Kotlin系列我打算寫出最適合初學者入門的文章
網(wǎng)上有很多文章,這些文章寫的都不錯
但是鄙人以為,這些文章有一個共同的特點(是優(yōu)點,但同時也是缺點)
所以我用特點來形容
我一般不喜歡講廢話(這是一句廢話,sorry)
能用圖解決的盡量不用文字描述
java中的構造方法
/**
* java person 類
*/
public class Person {
String name;
int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
特點:
1、方法名與類名相同
2、不定義返回值類型
Kotlin中的構造方法
Kotlin中講構造方法獨立了出來,使用關鍵字constructor來表示。同時,Kotlin中將構造方法分為了兩類:主構造方法和次構造方法
主構造方法,每個類最多有1個
依然拿我們的Penguin類(企鵝的意思)舉例說明
為了不讓大家看著蒙圈,我專門把空參/有參構造方法寫在了一起,方便大家對比
主構造方法在類后面聲明??
1、空參主構造方法/有參主構造方法

2、constructor關鍵字可以省略

3、如果加權限修飾符,那么放到constructor前面,此時,就不能省略constructor關鍵字了

再次強調(diào),當有了權限修飾符時,就不能省略constructor關鍵字了

到這里,有關主構造方法的聲明語法就講完了
接下來我們會有另外一個問題,怎么用?
當使用有參構造方法時,我們怎么使用主構造方法中的參數(shù)呢?
java中的使用

Kotlin的主構造方法是沒有方法體的,這就意味著我們無法在主構造方法中進行任何操作。
但Kotlin為我們提供了一個init代碼塊,這個代碼塊的執(zhí)行順序在主構造方法之后,次構造方法之前,我們可以在這個代碼塊中進行各種初始化的操作,包括訪問主構造方法中的參數(shù)??
/**
* kotlin 企鵝類
*/
class Penguin private constructor (name:String,age:Int) {
var name:String?=null //名稱
var age:Int=0 //年齡
var weight:Int=100 //體重
//kotlin為我們提供了一個init代碼塊,
//init代碼塊的執(zhí)行順序在主構造方法之后
//我們可以在init代碼塊中進行各種初始化操作
//init代碼塊中可以訪問主構造方法中的變量
init {
this.name=name
this.age=age
}
}
終于不用截圖了,好輕松的說??
到這里,主構造方法的聲明加使用就講完了。
現(xiàn)在我們講一點有趣(奇怪)的知識

在上面這段代碼里,有一個小問題
這個問題小白是不介意的,大神們是無法忍受的,例如我-----就能忍受。
言歸正傳,我們來看這段代碼有什么問題??

一個字:太繁瑣。
Kotlin的設計理念之一就是要簡潔,越簡潔越好。讓大家把節(jié)省下來的時間去做更重要的事情,例如撩妹。
在一個類中聲明屬性,通過構造方法傳值進行初始化這種操作有沒有很頻繁,有沒有很繁瑣,雖然IDE給我們提供了快捷鍵,雖然你的手速也很快,但是要是能把這個過程“省略”掉就更完美了。
Kotlin讓提供了這樣的功能
主構造方法中聲明屬性

左側的寫法跟右側的寫法效果完全相同。
var換成val也可以??

好了,到這里,主構造方法的知識就真的講完了。
大家有沒有覺得學到這里的時候覺得Kotlin很爽,腰不酸了腿不疼了,一口氣上五樓不費勁了,奇怪的知識增加了。

次構造方法,每個類可以有N個
次構造方法聲明在類中,依然使用constructor來聲明
/**
* kotlin 企鵝類
*/
class Penguin {
var weight:Int=100 //體重
var age:Int=0
var name:String?=null
//空參次構造器
constructor(){ }
//有參次構造器
constructor(name:String,age:Int){
this.name=name
this.age=age
}
}
當構造方法中沒有邏輯時候,大括弧可以省略
/**
* kotlin 企鵝類
*/
class Penguin {
var weight:Int=100 //體重
var age:Int=0
var name:String?=null
//空參次構造方法,如果沒有邏輯,可以省略大括弧
constructor()
//有參次構造方法,如果沒有邏輯,可以省略括弧,不過有參的空構造方法是沒有意義的
constructor(name:String,age:Int)
}
當主構造器和次構造器同時存在時,次構造器必須直接或者間接調(diào)用主構造器
/**
* kotlin 企鵝類
*/
class Penguin constructor(name: String) {
var weight:Int=100 //體重
var age:Int=0
var name:String?=null
//空參次構造器,調(diào)用了下面的次要構造方法
constructor():this("奔波兒霸",10)
//有參次構造器,調(diào)用了主構造方法
constructor(name:String,age:Int):this(name){
this.name=name
this.age=age
}
}
構造方法調(diào)用構造方法的方式如??代碼所示,使用:this來調(diào)用
執(zhí)行順序上,主構造器>init代碼塊>次構造器
與java相似,當我們不聲明任何構造方法時,Kotlin編譯器會默認給我們增加一個空參構造方法
/**
* kotlin 企鵝類
*/
class Penguin constructor() {
var weight:Int=100 //體重
var age:Int=0
var name:String?=null
}
如??,當我們不聲明任何構造方法時,Kotlin編譯器會默認給我們增加一個構造方法(眼睛看不著,編譯之后的代碼會看到)
到這里,有關Kotlin中的構造方法就講完了
總結一下
重點在主構造方法
當主構造方法和次構造方法同時存在,次構造方法必須調(diào)用主構造方法
