Kotlin异常与Java异常的区别:
throw的Kotlin中是个表达式,这样我们可以将throw作为Elvis表达式【val test = aa ?: bb,这样的则为Elvis表达式,表示如果?前面的不为null则将前面的aa赋值给test,否则则执行?后面的赋值test】的一部分,下面看下代码:
呃,有个东东比较奇怪:
这里要解释一下:throw表达式的类型是一种特殊的类型:Nothing。在自己的代码中,可以使用Nothing来标记永远不会返回的函数。好下面来把程序执行一下:
比如好理解,接下来咱们将str的值置为null再看下:
好,还是将str的值还原,继续修改程序:
而如果咱们将置为null,则结果也可想而知,肯定抛异常了:
下面来瞅一下Nothing的定义:
关于Nothing,它还可以这样用“Nothing?”,由于Nothing是代表一个永远都不会返回值,而?表示它可以为null,所以很明显"Nothing?"可以说明是null的一种类型,下面可以验证一下:
那,下面再来看:
此时它又是啥类型呢?其实是:
注解(annotation):
在Kotlin中也是存有注解的,那下面看一下如何来创建一个注解:
而我们可以利用meta-annotation(元注解)来给注解增加额外的元数据,下面看几个重要的元注解:
1、@Target:其实跟Java注解类似,用来标识该注解是要写在哪个地方。
2、@Retention: 保持策略,也就是该注解是在代码中出现,还是运行时上面,还是说在字节码上面:
接下来咱们来使用一下咱们定义的注解:
我们知道在Kotlin中有primary constructor和secondary constructor,其中在主构造函数时我们定义时可以这样:
其实主构造方法是可以有此关键字的:
而如果想给我们的主构造方法加上注解,此关键字就不能省了,如下:
如果省掉则会报错:
其中也可以给属性的getter和setter增加注解,如下: