Kotlin异常与Java异常的区别及注解详解
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增加注解,如下:

Kotlin异常与Java异常的区别及注解详解的更多相关文章
- Java异常(一) Java异常简介及其架构
概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...
- “全栈2019”Java异常第二十二章:try-with-resources语句详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- java线程池的使用与详解
java线程池的使用与详解 [转载]本文转载自两篇博文: 1.Java并发编程:线程池的使用:http://www.cnblogs.com/dolphin0520/p/3932921.html ...
- 牛客网 Java 工程师能力评估 20 题 - 详解
牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...
- JAVA通过JDBC连接Oracle数据库详解【转载】
JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...
- 【转】Java魔法堂:String.format详解
Java魔法堂:String.format详解 目录 一.前言 二.重载方法 三.占位符 四.对字符.字符串进行格式化 五.对整数进行格式化 六. ...
- Java线程创建形式 Thread构造详解 多线程中篇(五)
Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...
- (7)Java数据结构--集合map,set,list详解
MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...
随机推荐
- Mobaxterm使用(类似xshell)
先来看看SSH是什么,定义如下:SSH是一种可以保证用户远程登录到系统的协议.实际上,SSH是一个网络协议,允许通过网络连接到Linux和Unix服务器.SSH使用公钥加密来认证远程的计算机.通常有多 ...
- [ARM-Linux开发]mknod命令使用
mknod - make block or character special files mknod [OPTION]... NAME TYPE [MAJOR MINOR] option 有 ...
- (CSDN迁移)JAVA多线程实现-继承Thread
继承Thread方法: extends Thread 重写覆盖run()方法: @Override public void run() 通过start()方法启动线程. threadDemo01.st ...
- 【记录】【springboot】动态定时任务ScheduledFuture,可添加、修改、删除
这里只演示添加和删除任务的,因为修改就是删除任务再添加而已. 方便演示,任务就是每3秒打印 1.没有任务 后台 2.添加一个任务 3.再添加一个任务 4.删除一个任务 5.再添加一个任务 6.代码 运 ...
- 几个c++界面库的比较
有些人说QT比MFC简单,QT封装得太好了,给初学者错觉,QT很简单.QT实现的功能比MFC更多(多到有些时候你觉得QT真TM啰唆,但是有时又体会到他啰唆得很强大很有柔性),显然比MFC代码更多,运行 ...
- MySQL单机优化---SQL优化
SQL优化(变多次维护为一次维护) Sql优化分为:DDL.DML.DQL 一.DDL优化 1 .通过禁用索引来提供导入数据性能 . 这个操作主要针对有数据库的表,追加数据 //去除键 alter t ...
- MySQL单机优化---分表、分区、分库
一.分表: 水平分表:根据条件把数据分为N个表(例如:商品表中有月份列,则可以按月份进行水平分表). 使用场景:一张表中数据太多,查询效率太慢. 当需要同时查询被水平分表的多张表时: 在两条SQL语句 ...
- vue中引入百度地图
xxx.vue <template> <div> <el-input v-model="inputaddr"> </el-input> ...
- JavaScript 的 深拷贝和浅拷贝
深拷贝和浅拷贝都是针对的引用类型, JS中的变量类型分为值类型(基本类型)和引用类型: 对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会对地址进行拷贝,最终两个变量指向同一份数据 一.先 ...
- Linux 服务器 关闭FTP匿名访问
service vsftpd status //查看FTP运行状态 vim /etc/vsftpd/vsftpd.conf //修改配置文件 找到vsftpd.conf中的 anonymous_ena ...