ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Throws、Throw、Try-catch-finally的区别及应用

2022-03-21 22:58:05  阅读:176  来源: 互联网

标签:try public Try finally catch Throwable 异常 Throw


一、异常层次结构

异常Exception是Throwable的一个子类。

二、异常方法

下面的列表是 Throwable 类的主要方法:

序号方法及说明
1public String getMessage()
返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。
2public Throwable getCause()
返回一个 Throwable 对象代表异常原因。
3public String toString()
返回此 Throwable 的简短描述。
4public void printStackTrace()
将此 Throwable 及其回溯打印到标准错误流。。
5public StackTraceElement [] getStackTrace()
返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底
6public Throwable fillInStackTrace()
用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。

三、捕获异常(try-catch )

try后的代码发生异常,catch块中的语句就会捕获异常类,try后的代码块可以起到保护作用

public class test {
    public static void main(String[] args) {

//        try {
//              可能出现异常代码块
//        }catch (异常类型 变量名) {
//              catch块
//        }

        try {
            int a = 1/0;
        }catch (Exception e) {
            System.out.println(e);
        }
    }
}
//    输出:java.lang.ArithmeticException: / by zero

try-catch还可以执行多重捕获,当发生异常会传递到第一个catch块,如果抛出的异常数据类型和第一个不匹配,就会传递给下一个catch块

try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}

四、 try-catch-finally

finally:要try-catch一起使用,用在后面,无论有什么异常发生,finally都会被执行(可以运行清理类型等收尾善后性质的语句)

public class test {
    public static void main(String[] args) {
        try {
            int a = 1/0;
        }catch (Exception e) {
            System.out.println(e);
        }finally {
            System.out.println("finally执行");
        }
    }
}
//java.lang.ArithmeticException: / by zero
//        finally执行

注意:

  • catch 不能独立于 try 存在。
  • 在 try/catch 后面添加 finally 块并非强制性要求的。
  • try 代码后不能既没 catch 块也没 finally 块
  • try, catch, finally 块之间不能添加任何代码

五、 throw与throws

throws关键字

throws用来在类中捕获异常信息,标明方法可能抛出的异常。说明该方法在运行的时候可能会出现这样的异常,在代码中一定要对相应的异常进行处理。一个方法还可以声明多个异常,用逗号隔开就行了。

public class test {
    public static void main(String[] args) {
        damo1();
    }
    // 调用可能会出异常
    private static void damo1() throws NumberFormatException{
        int[] arr = null;
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
//    Exception in thread "main" java.lang.NullPointerException
}

throw关键字

当程序发生异常而无法处理的时候,会抛出对应的异常对象。在某些时刻可能会想要自行定义抛出异常,想要自行抛出异常,可以使用throw关键字,并生成指定的异常对象抛出。throw是一个动作,是抛出异常。例如:throw new RuntimeException(),主动抛出异常。

public class test {
    public static void main(String[] args) {
        try {
            int a = 1/0;
        }catch (Exception e) {
            System.out.println(e);
        }finally {
            System.out.println("finally执行");
        }
        if (true) {
            throw new RuntimeException("自定义的throw错误");
        }
    }

//    java.lang.ArithmeticException: / by zero
//    finally执行
//    Exception in thread "main" java.lang.RuntimeException: 自定义的throw错误
//    at com.xizhicheng.mybatis.test.main(test.java:15)
}

标签:try,public,Try,finally,catch,Throwable,异常,Throw
来源: https://blog.csdn.net/weixin_45754865/article/details/123645903

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有