Kt学习笔记(三) 构造器

一、主构造器
  • 在Kt中允许定义一个主构造器(primary constructor )和若干个第二构造器(secondary constructor)
  • 主构造器是类头的一部分,紧跟在类名后面,构造器参数是可选的
class Person constructor (firstName : String)
{
}
  • 如果主构造器没有任何注释(annotation)或修饰器(modifier)constructor可以直接省略
class Person  (firstName : String)
{
}

主构造器的初始化

 class Person constructor (firstName : String){
     //实现主构造器 进行初始化
     var name = firstName //主构造器的参数还可以用于对类属性的初始化
     init {
         println(firstName)
     }
 }

Attention:

-》var val关键字也可以用于主构造器的参数,如果使用var,参数对于构造器来说是变量,
可以在构造器内部修改变量的值。
-》如果使用val声明,参数就变成了常量,在构造器内部不能修改该参数的值
-》即使使用var声明变量,在构造器内部修改参数变量值后,并不会把修改的值传到对象外部

二、第二构造器

  Kt类除了可以声明一个主构造器外,还可以声明若干个第二构造器,第二构造器在类中声明,前面必须加constructor关键字

class Animation {
    //第二构造器需要在类中声明,前面必须加constructor关键字
    constructor(color: String)  {
    	priintln(color)
    }
}
  • 如果类中声明了主构造器,那么所有第二构造器都需要在声明后面调用主构造器
  • 或通过另外一个第二构造器间接调用主构造器
class QACommunity (var url:String){

    // 主构造器实现部分
    init {
        println(url)
    }
    //第二构造器(通过this直接调用主构造器)
    constructor(value : Int) : this("geekori.com"){
        println(value)
    }
    //第二构造器(通过this直接调用主构造器)
    constructor(description : String,url:String):this("["+ url+"]"){
        println(description + ":"+ url)
    }
    //第二构造器(通过this调用第二构造器,并间接调用主构造器)
    constructor():this(20){
        println("https://geekori.com")
    }

}

在这里插入图片描述

三、单例

无论是自动参数的构造器还是自己定义的构造器, 外部都是可以访问的,是public类型的, 如果要满足特殊需求,如实现单例模式(Singleton),可以使用private声明主构造器和第二构造器。

class Singleton private constructor()
{
  public var value : Singleton ? = null
    private object mHolder {val INSTANCE = Singleton()}

    companion object Factory{
        fun getInstance() : Singleton
        {
            return  mHolder.INSTANCE
        }
    }
}

这里可以对比一下JAVA的单例模式

public class SingleInstance {
    public static SingleInstance mInstance = null;


    private SingleInstance()
    {

    }

    public static SingleInstance getInstance(){
       return mInstance = new SingleInstance();
    }
}

在这里插入图片描述

打印出为同一个对象

四、默认参数
class Customer (val customerName : String = "Bill",var age : Int = 14 )
{

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值