1. Java中的异常处理机制
什么是异常
异常是指程序运行中发生的非正常现象,比如:
- 数组访问越界
- 除数为0
- 网络中断
- 文件不存在
- ……
为什么需要异常处理
上述非正常现象在程序运行中不可避免,所以异常处理机制使得程序更加健壮,可靠。
Java中可以捕获那些异常
Java将异常分为Exception(异常) 和Error(错误) 两大类:
- Exception类(异常):解决由程序本身及环境所产生的异常,可以被捕获并进行处理;
- Error类(错误):处理内部系统错误,不可被处理,程序关闭。
java.lang 包是提供利用 Java 编程语言进行程序设计的基础类包,而异常处理类就是在该包中,如图是我从JDK 手册中截取出来的:
2. Java的异常处理方法
直接捕获处理
在Java中,对于异常可以直接捕获处理,处理方法如下:
try{
//有可能产生异常的代码
}
catch (异常类名1 异常对象名1){
//处理该异常的代码
}
finally{
//无论是否发生异常,都会执行
}
如下是一个检测数组越界异常的处理示例:
public class ExceptionDemo01 {
public static void main(String[] args) {
try {
int a[] = {1, 2, 3};
int sum = 0;
//判断条件改为i<3时运行正常
//判断条件改为i<=3时,报异常,数组越界
for(int i = 0;i <= 3; i++) {
sum += a[i];
}
System.out.println("sum = " + sum);
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(e.toString());
}
finally {
System.out.println("finish");
}
}
}
执行结果如下:
抛出异常
在Java中,抛出异常有两种情况:
- 类的方法中不处理异常,抛出交由调用者处理。
- 自定义异常类,主动抛出;(见后面,下一节重点讲述)
第一种情况下,方法参数之后应该加入如下代码:
throws 异常类型名
示例代码如下:
class MyMath {
//该方法主动抛出异常
public int div(int a, int b) throws Exception {
return a/b;
}
}
public class ExceptionDemo02 {
public static void main(String[] args) {
MyMath m = new MyMath();
try {
m.div(1, 0);
}
catch (Exception e) {
System.out.println("Warning:" + e.toString());
}
finally {
System.out.println("finish!");
}
}
}
3. 自定义异常类并主动抛出异常
自定义异常类通过继承Exception类来实现:
class 自定义异常类名 extends Exception {
//异常类体
}
有以下两点需要注意:
- 自定义异常类将继承Exception 类的所有方法
- 可以在类体中定义其他处理方法
主动抛出该自定义异常类时的语法如下:
throw new 异常类名(信息)
其中信息部分是可选的,如果有,将会增加在toString()方法的返回值中。
示例代码如下:
//自定义异常类TestException
class TestException extends Exception {
public TestException() {
System.out.println("发生异常啦~~~");
}
}
public class ExceptionDemo03 {
public static void main(String[] args) {
int m = 5;
try {
if(m > 0) {
throw new TestException();
}
}
catch (TestException e) {
System.out.println(e.toString());
}
finally {
System.out.println("finish!");
}
}
}
接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。