和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函数;而直接传参的话就不需要加下划线,而且是可以直接使用的变量;
好了,由于内容简洁,大家还是多看一下微妙,不过类这一块相信大家已经滚瓜烂熟了,所以我也就不详细描述了,学得愉快!