Java学习笔记(3)——有关异常
异常处理:
try { }catch(ExceptionType0 e) { }catch(ExceptionType1 e) { }.....finally { }
有四种情况不执行finally语句:
- 在finally语句块中发生了异常
- 在前面的代码中使用了System.exit()退出程序。
- 程序所在的线程死亡
- 关闭CPU。
Java中常见异常:
异常类 | 说明 |
ClassCastException | 类型转换异常 |
ClassNotFoundException | 未找到相对应的异常 |
ArithmeticException | 算术异常 |
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
ArrayStoreException | 数组中包含不兼容的值抛出异常 |
SQLException | 操作数据库异常类 |
NullPointerException | 空指针异常 |
NoSuchFieldException | 字段未找到异常 |
NoSuchMethodException | 方法未找到抛出的异常 |
NumberFormatException | 字符串转换为数字抛出的异常 |
NegativeArraySizeException | 数组元素个数为负数抛出的异常 |
StringIndexOutOfBoundsException | 字符串索引超出范围抛出的异常 |
IOEException | 输入输出异常 |
IllEgalAccessException | 不允许访问某类异常 |
InstantiationException | 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出的异常 |
EOFException | 文件已结束异常 |
FileNotFoundException | 文件未找到异常 |
自定义异常:
(1)创建自定义异常类
(2)在方法中通过throw关键字抛出异常对象
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常。
1 public class Tran {
2
3 int add(int x,int y) throws MyException {
4
5 if(x+y>=500||x+y<=0) {
6 throw new MyException("越界");
7 }else if(x==y){
8 throw new MyException("相等");
9 }
10 return x+y;
11 }
12
13 public static void main(String[] args) {
14 // TODO Auto-generated method stub
15 try {
16 Tran T = new Tran();
17 T.add(85, 46);
18 //如果没注释掉T.add(446, 467);则抛出越界的异常后,程序终止,不会判断是否相等。
19 T.add(446, 467);//将会抛出越界的异常
20
21 T.add(46, 46); //将会抛出相等的异常
22 }catch(MyException e) {
23 System.out.println(e);
24 }
25 }
26
27 }
28 class MyException extends Exception{
29 public MyException(String information){
30 super(information);
31 }
32 }
1 try {
2 Tran T = new Tran();
3 System.out.println(T.add(46, 0));
4
5 }catch(MyException e) {
6 System.out.println(e);
7 }catch(ArithmeticException e ) {
8 System.out.println("除数不能为0");
9 }catch(Exception e) {
10 System.out.println("发生除上述两种情况外的异常");
11 }
当我们使用多个catch来捕获异常时,Exception必须放在最后!
因为Exception是所有异常的父类,如果将(Exception e)放在第一个,后面的代码块将不会得到执行。
所以catch语句的顺序很重要!