1. 简单要点
- Throwable是Java异常体系的根,有两个子类:Error 、Exception
- 异常对象的方法:getMessage(): 返回该异常的详细描述字符串;printStackTrace():将该异常事件的跟踪栈信息输出
- 子类方法重写父类方法时,子类方法抛出的异常对象类型不能比父类方法抛出的异常类型更宽泛
- 自定义异常类中至少定义两个构造方法:一个是无参数的;另一个是带 String 参数的,将这个参数参数传给父类的 Exception 的相同构造方法。
- 自行抛出异常使用 throw 语句,它抛出异常对象,且每次只能抛出一个
2. 要点图
3. 例子
package ExceptionCodes; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.Scanner; public class TryCatchFnally { public static void main(String[] args) throws FileNotFoundException { Scanner sc = new Scanner(System.in); FileInputStream fis = null; PrintStream ps = null; ps = new PrintStream("D:/log.txt"); try { int j = 1 / 2;// 产生ArithmeticException-runtime-可以不由用户自行处理-jvm会处理的 // checked异常-必须声明抛出或者try包装 fis = new FileInputStream(""); j = sc.nextInt(); } catch (ArithmeticException | FileNotFoundException ex) { // 这里表示对于jvm抓到并抛出的exception实例获取 // 类型匹配 // 处理算术异常的catch块 // 1.打印堆栈信息,或者是把堆栈信息输出到日志文件 // 2.转发此ex // ex.printStackTrace(); ps.append("2020-11-5。 "); ps.append("在此try语句内产生了一个算术异常,请处理 "); ex.printStackTrace(ps); // 多重捕获的情况下,ex实例是final的,不可以重新被赋值 // ex=new RuntimeException("aaa"); } catch (Exception ex) { // 处理所有的可能发生的异常及其子类 ex = new RuntimeException("aaa"); } finally { // 表示无论是否发生异常,都必须要执行的代码 // 通常是关闭各类资源 sc.close();// 关闭扫描器 ps.close(); } System.out.println("程序安全运行至此。"); // 当调用的方法可能会产生checked异常时,有2种处理 // 1.使用try-catch包装这个方法-表示可以将即将产生的异常 // 实例捕获 // 2.在调用方法上声明有这个异常产生,交由上一级调用处理 } }
运行结果: