类
申明类使用 class 关键字来标识,这个与Java中一样的。但是在kotlin中默认类都是不可继承的,也就是所说的final的类型,如果需要别继承,则必须将其标记为 open 或者 abstract 类型。可见性声明Kotlin 一共有四种可见性修饰符:。可见性修饰可用于函数、属性、类、对象和接口,但不能用于局部变量。如果没有显式指定修饰符的话,默认可⻅性是 public。与java中默认类型不同。类属性
getter/setter及filed关键字在kotlin中对于var的变量都会默认有setter和getter方法,对val的仅有getter方法,当然也可以复写getter和setter方法,一般写法如下:
值得注意的是,在复写getter和setter时,很容易犯错,请看如下代码:
上面的代码编译期间是没有任何问题,但是运行起来呢?发现发生了。。。怎么会是这么个鬼错误。这么简单的代码还能写错?这里教大家一个展示转为java的方法。通过 Tools ---> Kotlin ----> show kotlin ByteCode ,这里转出来是字节码,很难看,然后在对话框上面在点击 DeCompile 这样就出现java代码了,看看上面的代码生成了什么?
上面的getter和setter方法都调用的是自己的方法。所以就发生StackOverflowError的错误了。这怎么办?Kotlin官方也意识到这个问题啦,便有了关键字啦。正确写法如下:
这样的写法请自行转换为java代码看看是什么代码。
标识符只能用在属性的访问器内。
lateinit关键字由于kotlin默认是不允许为空的,所以在声明变量时,必须对其进行赋值,但是有些时候,我们确时无法在一开始定义的时候就赋值,这时候就需要延迟赋值。这时就用lateinit关键字进行标记。示例如下:
注意:
lateinit 只能对var类型的变量
lateinit 不能用于基础类型,因为基础类型没有null的情况
构造Kotlin中的类需要构造函数时,可以有一个主构造函数和多个次构造函数,当然也可以没有构造函数。主构造函数主构造函数在类名后。写法如下:
如果类中没有任何的代码时,则可以省略最后面的括号写法如下:
当构造函数有注解或者可见性修饰符时,构造函数需要加关键字,如下:
private 指的是构造方法为private 类型。由于主构造函数中是不能有代码块的,如果想要在构造函数中有代码块,则必须使用语句块,将初始话语句写在init代码块中,代码块中可以访问到构造函数的属性,并执行一些语句块,示例如下:
二级构造二级构造函数,也称为次级构造函数。关于二级构造函数,主要有以下几点:
次级构造函数不能省略constructor关键字;
当类拥有主构造函数时,任何一个二级构造函数都需要直接或间接通过另一个二级构造函数代理主构造函数;
类中的一个构造函数代理另一个构造函数,需要使用关键字this;
示例如下:
这篇文章将类的构造和一些属性相关的知识已经讲完了,下一篇会介绍继承或者接口相关的知识点,尽情期待。
领取专属 10元无门槛券
私享最新 技术干货