java异常处理总结

总览

java异常机制主要有 try , catch , finally , throwthrows 5个关键字。
其中try,catch,finally的基本使用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try{
...
//这里写入有可能引发异常的代码
}catch(MyException1 e){
//这里写捕捉异常的代码或者提示信息
}catch(...){
//catch可以写多个,
//从上到下的异常也要遵守继承关系
//只要捕捉到一个catch就不会向下执行其他的catch
}catch(Exception e){
//Exception是其他所有的Exception的父类,因此一般写在最后
}finally{
//这里的代码总会被执行
//无论是否出现异常,上面哪一个catch执行了
//如果有finally,最终都会执行finally中的代码
}

自定义异常

定义自定义异常

自定义异常要继承Exception基类。定义异常类的时候通常需要提供两个构造器:

  • 无参构造器。
  • 带字符串构造器,用于打印信息,也就是getMessage()的返回值。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 自定义异常
*/
public class MyException extends Exception {
//无参构造器
public MyException() {}
//带字符串构造器
public MyException(String msg) {
//super方法必须写在第一行
super(msg);
System.out.println("有异常了");
}
}

使用自定义异常

当要使用自定义异常的时候,通常就要借助throw关键字了,在要使用异常的地方直接throw出去就好了。由两点需要注意:

  • throw语句要么处于try块里。
  • 要么放在一个带throws声明抛出的方法中。

例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//throws MyException
void throwException(int a) throws MyException {
if (a > 0) {
//抛出自定义异常
throw new MyException("参数大于0了,我就要抛出个异常");
}
}
//try catch
void throwException(int a) {
try {
if (a > 0) {
//抛出自定义异常
throw new MyException("参数大于1");
}
} catch (MyException e) {
System.out.println("不能大于1");
}
}

完整代码

MyException:

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 自定义异常
*/
public class MyException extends Exception {
//无参构造器
public MyException() {}
//带字符串构造器
public MyException(String msg) {
//super方法必须写在第一行
super(msg);
System.out.println("有异常了");
}
}

Test:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Test {
public static void main(String[] args) throws Exception {
// Test t = new Test();
// t.throwException(31);
try {
Test test = new Test();
test.throwException(3);
} catch (Exception e) {
System.out.println("抛出异常了"+e.toString());
}
}
void throwException(int a) throws MyException {
if (a > 0) {
// 抛出自定义异常
throw new MyException("参数大于0了,我就要抛出个异常");
// try {
// if (a > 1) {
// throw new MyException("参数大于1");
// }
// } catch (MyException e) {
// System.out.println("不能大于1");
// }
}
}
}

Output:

1
2
有异常了
抛出异常了com.stxr.MyException: 参数大于0了,我就要抛出个异常