抛出异常和捕获异常的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21870555/article/details/82956374

抛出异常:如果程序中出现了异常,没有办法将具体的异常打印出来,不做任何处理

捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的Log

如果代码是抛出异常的方式,在运行时出现异常,并且打印的Log不明显,可以改用try{}catch方式来捕获异常,打印出详细的信息

throws语句   

throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。  

throw语句   

throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。

public class MyException extends Exception {  
  
    String msg;  
  
    MyException(int age) {  
        msg = "age can not be positive!";  
    }  
  
    public String toString() {  
        return msg;  
    }  
      
}  
package com.hb.exception;  
  
public class Age {  
    public void intage(int n) throws MyException {//  
        if (n < 0 || n > 120) {  
            MyException e = new MyException(n);  
            throw e; // 是一个转向语句,抛出对象实例,停止执行后面的代码  
        }  
        if (n >= 0) {  
            System.out.print("合理的年龄!");  
        }  
    }  
  
    public static void main(String args[]) {  
        int a = -5;  
        try { // try catch 必需有  
            Age age = new Age();  
            age.intage(a);// 触发异常  
            System.out.print("抛出异常后的代码");// 这段代码是不会被执行的,程序已经被转向  
        } catch (MyException ex) {  
            System.out.print(ex.toString());  
        } finally {// 无论抛不抛异常,无论catch语句的异常类型是否与所抛出的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。  
            System.out.print("进入finally! ");  
        }  
    }  
}  

打印结果:

age can not be positive!进入finally! 

throw 是语句抛出一个异常;throws 是方法抛出一个异常;

throw语法:throw <异常对象>

在方法声明中,添加throws子句表示该方法将抛出异常。

throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]

其中:异常类可以声明多个,用逗号分割。

猜你喜欢

转载自blog.csdn.net/qq_21870555/article/details/82956374