Java异常处理---throw和throws

前言

发现错误的理想时期是在试图运行程序之前。然而,编译期间并不能找出所有的错误,余下的问题必须在运行期间解决。这就需要错误源通过某种方式,把适当信息传递给某个接受者——该接受者知道如何正确处理这个问题。

throw

throw是语句抛出一个异常
语法:throws(异常对象)

throw e;
throws

throws是方法可能抛出异常的声明。(用于方法时,告诉调用方法的调用者,方法可能要抛出异常了 )
语法:[(修饰符)] (返回值类型) (方法名) ([参数列表]) [throws(异常类)]{…}

public void test() throws Exception1,Exception2,Exception3{...}
Example:
public class test {
    public void func(int a) throws NumberFormatException, NullPointerException {
        try {
            if (a == 1) {
                throw new IllegalAccessException();
            } else if (a == 2) {
                throw new NumberFormatException("continue to throw");
            } else {
                throw new NullPointerException("user-defined Exception");
            }
        } catch (IllegalAccessException e) {
            System.out.println("会发生IllegalAccessException!!");
            //catch到自己解决 就不用向外抛出 函数声明后面也不用写
        } catch(NumberFormatException e) {
            throw e;
            //catch后继续抛出
        }
    }

函数声明后只需要写NumberFormatException NullPointerException,抛出后交给上层调用者解决,IllegalAccessException catch捕捉到自己解决 就不用写在函数后面

测试

调用两次函数 参数先输入1后输入2

运行结果

会发生IllegalAccessException!!
Exception in thread "main" java.lang.NumberFormatException: continue to throw
	at com.xxx.test.func(test.java:11)
	at com.xxx.test.main(test.java:25)

遇到illegalAccessException后自己解决,继续执行。遇到NumberFormationException抛出异常

区别
  1. throw在方法体内 throws在方法声明后面 由方法调用者来处理
  2. throw抛出一个异常实例 throws声明异常类型
  3. throws执行后一定会抛出具体异常 throws表示方法可能抛出

两者都不会由函数去处理异常,处理异常是有函数的上层调用

针对可能出现异常的方法针对性写一个throw是一个良好的编程习惯

发布了4 篇原创文章 · 获赞 8 · 访问量 292

猜你喜欢

转载自blog.csdn.net/zzZsleep7/article/details/105152867