Java的异常机制
(一)异常的概念
异常是指程序在编译或运行时出现的导致程序不能继续编译或运行的状况。、
(二)Throwable类
Throwable类继承自Object类,是Java中所有错误或异常的超类,只有该类及其子类的对象才能通过throw语句抛出。Throwable类的子类有Error类和Exception类。
在异常机制中,编译时的异常直接继承自Exception类,而运行时异常继承自其子类RuntimeException类。
(三)异常的处理
异常的处理是通过try/catch语句进行捕获并处理。
①try语法:try{ [可能出现异常的代码] };
②catch语法:catch ( [预匹配的异常] ) { [处理代码] };
示例:
Scanner input = new Scanner(System.in);
try {
System.out.println("请输入被除数");
int n1 = input.nextInt();
System.out.println("请输入除数");
int n2 = input.nextInt();
System.out.println("结果为:"+n1/n2);
} catch (ArithmeticException e) {
System.out.println("分母不能为0");
System.out.println(e.getMessage());
e.printStackTrace();
}catch (InputMismatchException e) {
System.out.println("分子分母都应该是数字");
System.out.println(e.getMessage());
}catch (Exception e) {
System.out.println("出现了未知异常");
} //捕获多个异常分别处理
Scanner input = new Scanner(System.in);
try {
int n = input.nextInt();
} catch (InputMismatchException | ArithmeticException |ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
//捕获多个异常合并处理
(注:在多重catch机制中,try模块发生异常时,异常机制按catch顺序逐个匹配异常,一旦匹配成功则不再继续匹配)
(四)finally关键字
无论方法在执行过程中是否发生异常,方法中的finally模块都会执行。
Scanner input = new Scanner(System.in);
try {
int n = input.nextInt();
} catch (InputMismatchException e) {
e.printStackTrace();
}
finally {
System.out.println("finally");
}
(注:finally必须与try或try/catch配合使用;在方法执行return语句前,未执行的finally模块将被强制执行)
(五)异常对象的常用方法
①printStackTrace():打印输出异常的堆栈信息;
②getMessage():返回异常信息描述字符串。
(六)常见的异常
异 常 |
描 述 |
Exception |
异常层次结构的父类 |
NullPointerException |
空指针异常 |
ClassNotFoundException |
类不存在 |
ClassCastException |
对象强制类型转换出错 |
ArithmeticException |
算术错误 |
ArrayIndexOutOfBoundsException |
数组下标越界 |
IllegalArgumentException |
方法参数异常 |
NumberFormatException |
数字格式转换异常 |
(七)throws关键字
throws关键字用于声明异常,将该方法出现的异常反馈给上层方法处理。
InterruptedException {
try {
test();
} catch (IOException e) {
e.printStackTrace();
}
} static public void test() throws InterruptedException,IOException{
System.out.println("线程休眠开始");
Thread.sleep(2000);
System.out.println("线程休眠结束");
}
(注:main方法声明的异常由JVM处理)
(八)throw关键字
throw关键字用于抛出异常,使程序进入异常处理机制。
if (!("男".equals(gender) || "女".equals(gender))) {
Exception exp = new Exception("性别只能是男或女");
throw exp;
}
(九)自定义异常
自定义异常是通过继承异常的类而创建了该异常类的子类,主要用于精确地捕获指定异常。
public class AgeException extends Exception{
public AgeException() {
super();
} public AgeException(String msg) {
super(msg);
}
}
———————————————————————————————————————————————————————————————————
The end @ 万有引力+
-
-
-
-
-