Java18——异常
重要提醒:异常就是一种对象,表示阻止正常进行程序执行的错误或者情况。
异常是计算机程序在没有按照人的预期运行时,出现的问题。没有人愿意自己写的程序会出现问题,但我们在真实的运行程序时,总会遇到各种各样的问题,我们无法保证自己的程序就是完美无缺的,因此,我们需要一个强大的模块来解决我们在遇到错误时,可以提醒我们问题出现一些信息,帮助程序员来判断和解决问题。而Java中的异常处理机制就可以通过生产一个Exception对象来解决这个问题。
异常发生的原因有很多,通常包含以下几大类:
- 用户输入了非法数据。
- 要打开的文件不存在。
- 网络通信时连接中断,或者JVM内存溢出。
Java类库的每个包中都定义了异常类,所有异常类都是Throwable的子类。Throwable类派生了两个字类,分别是Exception和Error类。Error类及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重。Exception类被称为非致命类,可以通过捕捉处理使程序继续执行。
1.异常处理的机制
Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
1.1使用catch..try来捕获异常
为了解决异常,Java中提出一种假设:如果程序可以顺利完成,那就将系统的业务实现代码放在try块中定义,所有的异常处理逻辑放在catch中进行处理。
Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
1.2 throws/throw 关键字:
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。
也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
下面方法的声明抛出一个 RemoteException 异常:
import java.io.*;
public class className
{
public void deposit(double amount) throws RemoteException
{
// Method implementation
throw new RemoteException();
}
//Remainder of class definition
}
1.3 finally关键字
finally 关键字用来创建在 try 代码块后面执行的代码块。
无论是否发生异常,finally 代码块中的代码总会被执行。
在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在 catch 代码块最后,语法如下:
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}finally{
// 程序代码
}
注意下面事项:
- catch 不能独立于 try 存在。
- 在 try/catch 后面添加 finally 块并非强制性要求的。
- try 代码后不能既没 catch 块也没 finally 块。
- try, catch, finally 块之间不能添加任何代码。
1.4声明自定义异常
在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
可以像下面这样定义自己的异常类:
class MyException extends Exception{
}