kotlin基础教程:<7>类和field

本文介绍了Kotlin中类的创建,重点讲解了field的概念、类的成员特性(getset自动包含)、构造函数的主次之分,以及如何处理可能的空值规范。通过实例演示了如何调用成员并遵循防竞态条件规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和Java一样,kotlin也是具有类这个概念的,想到类,就会想到构造方法,毕竟一个类要想获取数据,构造方式是一个很重要的知识点,kotlin的构造方法有两类,一个是主构造,一个是次构造,而field只是一个字段,等价于成员变量的值;

上一期我们介绍了一下map集合,用来存放键值对,通过运算符重载的方式可以实现数据增删操作,通过foreach,增强for可以遍历集合;那么这一期就到了类的学习,内容较多,分期讲:

1、kotlin和Java的类创建不太一样,kotlin的成员是自带有Java中的getset的,而且使用的时候也是通过getset,field是一个字段,等价于成员的值,如果这个值被一个函数替代,也就是get替代的话,Java中对应的就是不会创建该成员变量:

//1.2 类的创建和field的含义
/*
* 在kotlin当中,类的成员相对于Java中的不一样,
* 类的成员在定义时相当于Java中的成员带上get和set
* 函数,这就跟val 和 var实现的变量可变和不可变有
* 密切联系
* */
class Tony1 {
    //field其实是一个字段,这里等价于变量的值,也就是这里的tony
    var name: String = "tony"
    //这里便没有set,而且是可空,不具有@NotNull注解
    val age: Int? = 2
     //明显这里的field是被一个函数替代的,被get函数替代了,这里的get用来随机从1~1000生成一个数
    var number: Int = (1..1000).shuffled().first()
}

我们调用的方式也需要注意一下,类成员都是通过:类名()点出来的

 //1.1 类和field
    /*
    * 我们要用类里面的成员是格式为:类名().成员名,这里其实相当于Java
    * 中调用了get函数来获取到的name的field,当然我们还可以通过Tony1().name = "jerry"
    * 的方式来设置成员的值,就跟Java中成员的set一样;
     */
    println(Tony1().name)
    Tony1().name = "jerry"
    //当field被get替代之后,相当于Java类中不会创建这个成员变量了
    println(Tony1().number)

防竞态条件规范,可以使用我们之前学习的内置函数来处理这些成员变量的null或空值问题,提醒大家的作用:

 class Tony1{
​
    //1.4 当我们的成员可为null和空值时,我们需要遵循一个规范
    var number1: String? = ""
    fun getShowNumber1(): String{
        return number1?.let {
            if(it.isBlank()){
                "结果是空值"
            }else{
                "最终的结果为:${it}"
            }
    }
 }   


就是在我们定义的成员存在空值或者null的时候,我们需要遵循这么一个规范,在类里面需要创建一个函数用来提示这个成员的field最终的结果;

2、构造函数

构造函数具有两种,一种是直接加在类名后面的主构造函数,一种是使用constructor()函数的次构造函数,次构造函数需要调用一次主构造函数,但其实不会影响使用,调用主函数也很简单,就是在函数的返回值类型的位置写上this(主构造函数变量名和值),不过这个值随便给也没有关系,不是管理问题的话用不到:

class Tony3(name1: String) {
    //2.3 次构造函数,必须要调用一下主构造函数,但是用不了这里传的参数
    constructor(sex : Char,score: Int) : this(name1 = "tony") {
        println("我是次要构造:tony ${sex} ${score} ")
    }
}
Tony3('男',50)


主构造函数也具有两种传参方法,一种是传临时参数,一种是传可直接用的参数:

//2.2 构造函数
//类名旁边的是主构造
class Tony2(_name:String,var age: Int,val info: String){
    //带有下划线的为临时参数,不可以直接使用,需要转化,也就是赋值给成员
    var name = _name
        get()=field
        //如果添加了私有化,那么就只能在内里面访问,在外面访问时相当于val
        private set(value){
           field = value
        }
        //但是没有_的参数直接使用
        fun show(){
            println(name + " "+ age + " "+ info)
        }
}

我们的临时参数的形式就是前面有一根下划线,而且该变量是不可以直接被使用,需要通过转化,也就是赋值给成员变量使用,可以在转化语句下面写get和set函数;而直接传参的话就不需要加下划线,而且是可以直接使用的变量;

好了,由于内容简洁,大家还是多看一下微妙,不过类这一块相信大家已经滚瓜烂熟了,所以我也就不详细描述了,学得愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程学渣ズ

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值