C/C++教程

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

本文主要是介绍Throws、Throw、Try-catch-finally的区别及应用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、异常层次结构

异常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)
}
这篇关于Throws、Throw、Try-catch-finally的区别及应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!