文章目录
- 前言
- kotlin 异常的简介
- kotlin 异常的使用
- 总结
前言
java 中的异常只要 try/catch 就可以捕获异常,那么 kotlin 与java 会有什么不同呢,是不是更简单呢,有哪些新的优势呢,下面就讲解一下
kotlin 异常的简介
- 可以在 catch 返回值
//下面是kotlin 特有的 - 可以在 catch 返回 null
- 可以在 catch 使用 return,跳出方法
- 不区分受检异常 和 不受检异常
- try/catch 可以作为一个表达式
异常的使用
1、一般情况,在 catch 返回值(注意对比,java和kotlin的区别)
//java
public class TryCatchAndFinally {
public static void main(String[] args){
BufferedReader bufferedReader = new BufferedReader(new StringReader("234"));
try {
System.out.println(readNumber(bufferedReader));
} catch (IOException e) {
e.printStackTrace();
}
}
public static int readNumber(BufferedReader reader) throws IOException {
try {
String readLine = reader.readLine();
return Integer.parseInt(readLine);
} catch (NumberFormatException e) {
return -1; //不是数字,返回-1
}finally {
reader.close();
}
}
}
//kotlin
fun readNumber(reader: BufferedReader): Int? {//返回值可为空
try {
return Integer.parseInt(reader.readLine())
}catch (e: NumberFormatException){
return null;
}finally {
reader.close()
}
}
fun main(args: Array<String>) {
val bufferedReader = BufferedReader(StringReader("234"))
println(bufferedReader)
}
在上面的代码中,还要注意 kotlin 是不区分受检异常 和 不受检异常。
正常情况下,如果是受检异常,那么都要写抛出异常的,就比如
IOException 是受检异常,在 java 中就一定得 throws,但kotlin 可以不用写在编译器也不会报错。
2、在 catch 返回 null 或者直接 return
//kotlin
fun readNumber(reader: BufferedReader): Int? {//返回值可为空
try {
return Integer.parseInt(reader.readLine())
}catch (e: NumberFormatException){
return null;
//return //可以用 return,直接跳出方法
}finally {
reader.close()
}
}
fun main(args: Array<String>) {
val bufferedReader = BufferedReader(StringReader("234"))
println(bufferedReader)
}
3、try/catch 可以作为一个表达式
import java.io.BufferedReader
import java.io.StringReader
fun readNumber(reader: BufferedReader){
val number = try {
Integer.parseInt(reader.readLine())
}catch (e: NumberFormatException){
null
}
println(number)
}
fun main(args: Array<String>) {
val bufferedReader = BufferedReader(StringReader("not a number"))
readNumber(bufferedReader)
}
上面代码可以看到如果 try 代码块执行正常,那么最后一个表达式就是结果,如果捕获异常,那么 catch 中的最后一个表达式就是结果。
总结
- kotlin 中的异常写法更简洁
- kotln 中的异常写法更多样化
如果对你有一点点帮助,那是值得高兴的事。:)
我的csdn:http://blog.csdn.net/shenshizhong
我的简书:http://www.jianshu.com/u/345daf0211ad