- 1.异常体系
- 2.Error和Exception
- 3.异常常用的5个关键字
- 4.运用
- (1)try..catch...finall
- try...catch...fianlly案例
- (2)throw/throws
- throw/throws案例
- (3)自定义异常
- (4)try...with... resource
1.异常体系 2.Error和Exception在Java中,异常处理(exception handling) :java语言或者程序员开发提供的一种机制,当有不
正常的情况发生时,可以发出信号。
这种发出信号的过程被称为抛出异常
(throwing an exception)。
-
Error
Error类对象由java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
(这些错误是不可查的,因为他们在应用程序的控制和处理之外,而且是绝大多数的程序运行不允许出现的情况。 -
Exception
-是程序本身的异常,包含运行时异常、可检查异常 -
运行时异常(RuntimeException)
Exception 类有一个重要的子类 RuntimeException。
RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、
ArithmeticException)和 Array Index Out Of Bound Exception。 -
可检查异常
类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,
如果不处理,程序就不能编译通过。
- try
- throw
- throws
- catch
- finally
//try语句块:检查语句块是否有异常
try{
语句块
}
catch(异常类型 e){
异常处理语句块
}
finally{
System.out.Println("执行完毕")
}
//try语句的finally提供一种无论是否抛出异常都必须要执行的finally中代码的机制
//catch语句块:出现异常,根据异常类型进行捕获处理
//异常类型可以写具体的,也可以写Exception
//e表示异常的名字,可以用来打印异常名字 System.out.Println(e);
try…catch…fianlly案例
public class Exception1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
try { // 测试异常
System.out.println("请输入年龄 ");
String s = sc.nextLine();
int age = Integer.parseInt(s);
System.out.println("十年后的年龄" + (age + 10));
} catch (Exception e) { // 捕获异常 e是异常内容
System.out.println("输入有无误");
System.out.println("异常:" + e);
} finally {
System.out.println("输入结束");
}
}
}
}
(2)throw/throws
- throws:在方法上声明抛出的可检查异常
- throw:使用throw抛出异常对象
public class Exception2 {
public static void main(String[] args) {
try {
f(1);
} catch (RuntimeException e) {
System.out.println(e.getMessage());
}
}
public static void f(int n) throws RuntimeException {//throws RuntimeException:抛出异常
if (n == 1) {
throw new RuntimeException("这是一个罕见异常,处理不了");// RuntimeException:运行时异常
}
}
}
(3)自定义异常执行结果
- 继承异常类(Exception/RuntimeException)
public class MyExpection extends RuntimeException{
}
- 调用父类有参构造方法
public MyExpection(String msg){
super(msg); //msg是异常信息
}
(4)try…with… resource
如果打开了外部资源(文件、数据库连接、网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们。
因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制.
如果我们不在编程时确保在正确的时机关闭外部资源,就会导致外部资源泄露,紧接着就会出现文件被异常占用,数据库连接过多导致连接池溢出等诸多很严重的问题。
//实现了AutoCloseable接口的对象
try(InputStream in=new FileInputStream("D:/abc.txt")){
//代码块
}catch(IOException e){
//捕获异常
}



