【学习笔记】Java异常Throwable类
异常介绍
异常分为Error和Exception两种类型。
Error
Error是Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。
Exception
Exception是因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。
Exception又可分为Check Exception和Uncheck Exception
Check Exception
编译时出现的异常
SQLException
操作数据库时,查询表可能发生的异常
IOException
操作文件时发生的异常
FileNotFoundException
当操作一个不存在的文件时发生的异常
ClassNotFoundException
加载一个不存在的类时发生的异常
EOFException
操作文件到文件末尾时发生的异常
IllegalArgumentException
参数异常
Uncheck Exception
运行时出现的异常
NullPointerException 空指针异常
1
2String name = null;
System.out.println("name.length");ArithmeticException 数学运算异常
1
System.out.println(1/0);
ArrayIndexOutOfBoundsException 数组下标越界异常
1
2int[] arr = {1,6,8};
System.out.println(arr[3]);ClassCastException 类型转换异常
1
2
3
4
5
6A b1 = new B(); //向上转型
B b2 = (B)b1; //向下转型
C c1 = (C)b; //抛出异常
class A{}
class B extends A{}
class C extends A{}NumberFormatException 数字格式异常
1
String name2 = "www"; System.out.println(Integer.parseInt(name2));
基本语法
IDEA快捷键:Ctrl + Alt + T
try-catch-finally
程序员在代码中捕获发生的异常,自行处理
1 | try{ |
处理机制:
- 当异常发生时,异常代码后面的代码不再执行
- 系统将异常封装成Exception对象e,传递给catch
- 得到异常对象后,程序员自行处理
- 如果没有发生异常,catch代码块不执行
注意:
- 存在try-finally方式,不处理异常,程序会直接崩溃
- 存在多个catch用于处理不同的业务逻辑。但是子类异常要写在前面,父类异常写在后面。
小练习:
1 | public static void main(String[] args) { |
throws
如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。
处理机制:
从最底层一层层往上throws
1 | public static void f1(){ |
自定义异常
应用实例
当我们接受Person对象年龄时,要求范围在18-120之间,否则抛出一个自定义异常(要求继承RuntimeException)并给出提示信息
1 | public class CustomException { |
一般情况下,自定义异常是继承RuntimeException即把自定义异常做成运行时异常,可以使用默认的处理机制,比较方便
throw和throws
意义 | 位置 | 后面跟 | |
throws | 异常处理的一种方式 | 方法声明处 | 异常类型 |
throw | 手动生成异常对象的关键字 | 方法体中 | 异常对象 |
加深理解
1 | public class Important { |
输出结果是:
1 | 进入方法A |
IDEA格式化代码快捷键:Ctrl + Alt + Shift + L