异常处理 ?处理(try-catch) :甩锅(throws)_ java异常(Exception)处理(5)

109 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第33天,点击查看活动详情

throws异常处理

基本介绍 throws异常处理是java处理异常的另一种方式,也是JVM的默认处理机制! 刚刚我们也已经介绍过了! 简单说就是:如果一个方法中的某处代码出现了异常,那么该方法就要进行异常异常处理!try-catch或者throws(如果不对异常进行处理那么默认也是throws)而throws处理机制就是将异常(向上一级抛)抛给方法的调用者,如果调用者都不进行异常处理,那么最终会有JVM处理,程序中断!

//throws异常处理细节!
public class ThrowsDetail {
    public static void main(String[] args) {
        f2();
    }
    public static void f2() /*throws ArithmeticException*/ {
//1.对于编译异常,程序中必须处理,比如 try-catch 或者 throws
//2.对于运行时异常,程序中如果没有处理,默认就是 throws 的方式处理
        int n1 = 10;
        int n2 = 0;
        double res = n1 / n2;
    }
    public static void f1() throws FileNotFoundException {
//这里大家思考问题 调用 f3() 报错
//解答
//1. 因为 f3() 方法抛出的是一个编译异常
//2. 即这时,就要 f1() 必须处理这个编译异常
//3. 在 f1() 中,要么 try-catch-finally ,或者继续 throws 这个编译异常
        f3(); // 抛出异常
    }
    public static void f3() throws FileNotFoundException {
        FileInputStream fis = new FileInputStream("d://aa.txt");
    }
    public static void f4() {
//解答:
//1. 在 f4()中调用方法 f5() 是 OK
//2. 原因是 f5() 抛出的是运行异常
//3. 而 java 中,并不要求程序员显示处理,因为有默认处理机制
        f5();
    }
    public static void f5() throws ArithmeticException {
    }
}
class Father { //父类
    public void method() throws RuntimeException {
    }
}
class Son extends Father {//子类
    //3. 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,
// 所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常类型的子类型
//4. 在 throws 过程中,如果有方法 try-catch , 就相当于处理异常,就可以不必 throws
    @Override
    public void method() throws ArithmeticException {
    }
}

自定义异常

基本概念 当程序中出现某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候我们可以自己设计异常类,用于描述该错误信息。 自定义异常步骤 1.定义类:自定义异常类名(设计者自己编写)继承ExceptionRuntimeException 2.如果继承Exception,属于编译异常 3.如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException实例 客户需求:当我们接收Person对象年龄时,要求范围在18-120之间,否者抛出一个自定义异常,并给出提示!

//解决方案
public class CustomException {
public static void main(String[] args) /*throws AgeException*/ {
int age = 180;
//要求范围在 18 – 120 之间,否则抛出一个自定义异常
if(!(age >= 18 && age <= 120)) {
//这里我们可以通过构造器,设置信息
throw new AgeException("年龄需要在 18~120 之间");
}
System.out.println("你的年龄范围正确.");
}
}
//自定义一个异常
//解读
//1. 一般情况下,我们自定义异常是继承 RuntimeException
//2. 即把自定义异常做成 运行时异常,好处时,我们可以使用默认的处理机制
//3. 即比较方便
class AgeException extends RuntimeException {
public AgeException(String message) {//构造器
super(message);
}
}

throwthrows的区别

意义位置后面跟的内容
throws异常处理的一种方式方法声明处异常类型
throw手动生成异常对象关键字方法体中异常对象

java异常章节学习到这里!如果对大家有所帮助,还望多多支持!如有错误多多指正!内容来自bug郭在B站学习韩顺平的java课程自己整理的笔记! `互关互访互相支持,一起进步!