JavaSE 11 异常处理,javase11异常处理
JavaSE 11 异常处理,javase11异常处理
1、概念
运行中发生的不正常的现象,称为异常。注意要和编译错误区分开。
2、异常的体系图
3、异常的处理方式
⑴ 自行处理
语法
try {
// 可能出现异常的代码 ①
// 正常的代码 ②
} catch (Exception e) {
// 处理异常的代码 ③
} finally {
// 一定会执行的代码【不管出不出异常】 ④
}
执行顺序
⒈ 出现异常:①③④
⒉ 没有异常:①②④
注意事项
① catch和finally都可以被省略,但是不能同时省略
示例:
try {
} finally {
}
或
try {
} catch (Exception e) {
}
② 多个catch块可以同时存在,但是异常的父类异常需要放在最后。因为catch块的被执行顺序是自上而下判断的
③ 执行try块中的语句时,如果遇到了异常,则try 块中剩下的语句不会被执行
④ finally中的语句一定会被执行,不管出不出现异常。
示例:
public class Test {
public static void main(String[] args) {
String name1 = new Test().getName1(); // 调用会出异常的方法
String name2 = new Test().getName2(); // 调用没有异常的方法
System.out.println(name1); // 王五
System.out.println(name2); // 王五
}
private String getName1() {
try {
int i = 1 / 0; // 出现异常
return "张三";
} catch (ArithmeticException e) {
return "李四";
} finally {
return "王五"; // 这里一定会被执行
}
}
private String getName2() {
try {
return "张三";
} catch (Exception e) {
return "李四";
} finally {
return "王五"; // 这里一定会被执行
}
}
}
代码规范
① 尽量减少try块中的代码,把有可能出现异常的代码放在try块中,不容易出现异常的代码放在try块外。可以提高效率
② 尽量用多个catch块来代替多个try-catch
③ 在catch块中处理的语句可以为:
catch(Exception e){
}
⒈ 打印友好提示
例如:System.out.println(“出错了…”);
⒉ 调用异常对象的getMessage( )方法
例如:System.out.println(e.getMessage( ));
⒊ 打印错误的追踪信息。需要调用异常对象的printStackTrace( )方法
例如:e.printStackTrace( );
⑵ 调用方处理
在可能出现异常的方法的声明处,使用throws关键字,将异常所属的类型或异常所属类型的父类抛出。
示例:
修饰符 返回值类型 方法名(形参列表) throws Exception {
}
这会将异常向上抛给调用者,如果调用者自己不处理,还可以继续向上抛出,直到抛给main方法。这时如果main方法还不处理,则还可以继续抛出,这时就抛给了虚拟机。虚拟机将会打印异常错误的堆栈追踪日志的信息。
4、常见的运行时异常
RuntimeException
运行时异常。它是那些可能在 Java 虚拟机正常运行期间抛出的异常的父类。
NullPointerException
空指针异常。当试图调用空引用的属性或方法时,会报此异常。
示例:
String str = null;
System.out.println(str.length( ));
IndexOutOfBoundsException
下标越界异常。当试图访问超出范围的索引时,会报此异常。【索引的范围:0 到 长度 - 1】
直接已知子类:
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
示例:
int[] numbers = new int[2];
System.out.println(numbers[2]);
ClassCastException
类型转换异常。当试图将某对象强制转换为不是该对象所属的类型时,会报此异常。
示例:
Object obj = 1.5;
String str = (String) obj;
NumberFormatException
数字格式不正确。当试图将字符串转换为数值时,但该字符串不是适当的数值格式,则会报此异常。
示例:
String str = “abc”;
int i = Integer.parseInt(str);
AritmeticException
数学运算异常。当出现异常的运算条件时,会报此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
示例:
int i = 1 / 0;
5、自定义异常
步骤:⑴ 定义一个类,让其继承RuntimeException或Exception
⑵ 编写有参构造器,形参为String类型,显示调用父类的有参构造器。【用于指定错误信息】
示例:
class MyException extends RuntimeException {
public MyException() {}
public MyException(String message) {
super(message);
}
}
6、生成异常对象
⑴ 系统自动抛出异常对象
当运行时出现的异常,属于Throwable的子类实例。例如常见的运行时异常。
⑵ 手动抛出异常对象
使用throw关键字。多用于生成自定义异常。
语法:throw new 自定义异常类名(错误信息);
示例:throw new MyException(“出错了!”);
7、throw和throws的对比
throw throws
———————————————————————————
定义的位置 方法中 方法声明时
表达的功能 生成异常的对象 将异常抛给调用方
(异常处理的方式之一)
关键字后跟什么 异常对象 异常类型
相关文章
- 暂无相关文章
用户点评