Kotlin基础之构造方法

我是IT王魔王
这是我的第7篇IT系列原创

Kotlin系列我打算写出最适合初学者入门的文章

网上有很多文章,这些文章写的都不错
但是鄙人以为,这些文章有一个共同的特点(是优点,但同时也是缺点)
所以我用特点来形容

我一般不喜欢讲废话(这是一句废话,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关键字可以省略


constructor关键字可以省略

3、如果加权限修饰符,那么放到constructor前面,此时,就不能省略constructor关键字了

加了权限修饰符

再次强调,当有了权限修饰符时,就不能省略constructor关键字了

不能省略constructor关键字

到这里,有关主构造方法的声明语法就讲完了
接下来我们会有另外一个问题,怎么用?

当使用有参构造方法时,我们怎么使用主构造方法中的参数呢?

java中的使用

java中使用构造方法中的参数

Kotlin的主构造方法是没有方法体的,这就意味着我们无法在主构造方法中进行任何操作。
但Kotlin为我们提供了一个init代码块,这个代码块的执行顺序在主构造方法之后,次构造方法之前,我们可以在这个代码块中进行各种初始化的操作,包括访问主构造方法中的参数👇

/**
* kotlin 企鹅类
*/
class Penguin private constructor (name:String,age:Int) {

   var name:String?=null //名称
   var age:Int=0  //年龄
   var weight:Int=100  //体重

   //kotlin为我们提供了一个init代码块,
   //init代码块的执行顺序在主构造方法之后
   //我们可以在init代码块中进行各种初始化操作
   //init代码块中可以访问主构造方法中的变量
   init {
       this.name=name
       this.age=age
   }
}

终于不用截图了,好轻松的说😀
到这里,主构造方法的声明加使用就讲完了。
现在我们讲一点有趣(奇怪)的知识


image.png

在上面这段代码里,有一个小问题
这个问题小白是不介意的,大神们是无法忍受的,例如我-----就能忍受。

言归正传,我们来看这段代码有什么问题👇

image.png

一个字:太繁琐。
Kotlin的设计理念之一就是要简洁,越简洁越好。让大家把节省下来的时间去做更重要的事情,例如撩妹。

在一个类中声明属性,通过构造方法传值进行初始化这种操作有没有很频繁,有没有很繁琐,虽然IDE给我们提供了快捷键,虽然你的手速也很快,但是要是能把这个过程“省略”掉就更完美了。
Kotlin让提供了这样的功能

主构造方法中声明属性

效果相同

左侧的写法跟右侧的写法效果完全相同。
var换成val也可以👇

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)
}

当主构造器和次构造器同时存在时,次构造器必须直接或者间接调用主构造器

/**
 * kotlin 企鹅类
 */
class Penguin constructor(name: String) {
    var weight:Int=100  //体重
    var age:Int=0
    var name:String?=null

    //空参次构造器,调用了下面的次要构造方法
    constructor():this("奔波儿霸",10)

    //有参次构造器,调用了主构造方法
    constructor(name:String,age:Int):this(name){
        this.name=name
        this.age=age
    }
}

构造方法调用构造方法的方式如👆代码所示,使用:this来调用

执行顺序上,主构造器>init代码块>次构造器

与java相似,当我们不声明任何构造方法时,Kotlin编译器会默认给我们增加一个空参构造方法


/**
 * kotlin 企鹅类
 */
class Penguin constructor() {
    var weight:Int=100  //体重
    var age:Int=0
    var name:String?=null
}

如👆,当我们不声明任何构造方法时,Kotlin编译器会默认给我们增加一个构造方法(眼睛看不着,编译之后的代码会看到)

到这里,有关Kotlin中的构造方法就讲完了
总结一下
重点在主构造方法
当主构造方法和次构造方法同时存在,次构造方法必须调用主构造方法

聊天结束
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345