Kotlin基础之构造方法

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关键字了

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

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

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

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

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

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

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

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

在一个类中声明属性,通过构造方法传值进行初始化这种操作有没有很频繁,有没有很繁琐,虽然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)
}

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

/**
 * 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中的构造方法就讲完了

总结一下
        重点在主构造方法
        当主构造方法和次构造方法同时存在,次构造方法必须调用主构造方法

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值