【JavaSE】throws 异常处理

举报
兮动人 发表于 2022/03/17 10:30:20 2022/03/17
【摘要】 【JavaSE】throws 异常处理

1. 基本介绍

  1. 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
  2. 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

2. 快速入门案例

在这里插入图片描述

解读:
1. 这里的异常是一个 FileNotFoundException,编译异常
2. 使用 try-catch-finally
3. 使用 throws ,抛出异常,让调用 f2 方法的调用者(方法)处理
4. throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。
5. throws 关键字后也可以是 异常列表,即可以抛出多个异常
public class Throws {
    public static void main(String[] args) {
        
    }

    public void f2() throws FileNotFoundException {

        FileInputStream fis = new FileInputStream("d://aa.txt");
        
    }
}

3. 注意事项和使用细节

  1. 对于编译异常,程序中必须处理,比如try-catch 或者 throws

  2. 对于运行时异常,程序中如果没有处理。默认就是throws的方式处理
    在这里插入图片描述
    在这里插入图片描述

  3. 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类
    在这里插入图片描述

  • 从图中可以看出 ,NullPointerExceptionRuntimeException 的子类
class Father { //父类
    public void method() throws RuntimeException {
    
    }
}

class Son extends Father {//子类

    @Override
    public void method() throws NullPointerException{
    
    }
}
  1. throws过程中,如果有方法 try-catch,就相当于处理异常,就可以不必 throws处理。
  1. 编译异常是程序员必须要处理的。而运行异常报错有默认处理机制,并不要求程序员显示处理运行异常。
  • 可以看到如下 f1() 调用 f3() 报错,是因为 FileNotFoundException 是编译异常,当 f1() 调用时f3(),必须处理f3()的编译异常,在 f3()try-catch-finally ,或者继续 throws 这个编译异常。
    在这里插入图片描述
  • 解决如下:
	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");
	}
  • 所以,如下可以看到 在f4()中调用方法f5() 是没问题的,原因是f5()抛出的是运行异常
	public static void f4() {
	    //解读:
	    //1. 在f4()中调用方法f5() 是 OK 的
	    //2. 原因是f5() 抛出的是运行异常
	    //3. 而java中,并不要求程序员显示处理运行异常,因为有默认处理机制
	    f5();
	}
	public static void f5() throws ArithmeticException {
	
	}

默认处理的运行异常
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。