kotlin 中的异常

文章目录
● 前言
● 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();
            return -1;
        }

    }
}
//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 中的异常写法更多样化

如果对你有一点点帮助,那是值得高兴的事。:)
欢迎长按下图 -> 识别图中二维码 或者 扫一扫 关注我的公众号:
shenshizhong.png

我的csdn:http://blog.csdn.net/shenshizhong
我的简书:http://www.jianshu.com/u/345daf0211ad

猜你喜欢

转载自blog.csdn.net/shenshizhong/article/details/78073573
今日推荐