【Java】学习笔记——异常处理
2009-04-09 17:42
441 查看
异常类的层次结构
注意:
RuntimeException定义的类为不需处理的类,而其他的例如IOException定义的类则必须处理,否则编译器会报错。
什么是异常
打开一个不存在的文件、网络连接中断、数组下标越界、正在加载的类文件丢失等都会引发异常。
Java中的异常类定义了程序中遇到的轻微的错误条件。
Java中的错误类定义了程序中不能恢复的严重错误条件。如内存溢出、类文件格式错误等。这一类错误由Java运行系统处理,不需要我们去处理。
异常处理
Java程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
注意事项
对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理。
如果父类中的方法抛出多个异常,则子类中的覆盖方法要么抛出相同的异常,要么抛出异常的子类,但不能抛出新的异常(注:构造方法除外)。
我们可以在方法声明时,声明一个不会抛出的异常,Java编译器就会强迫方法的使用者对异常进行处理。这种方式通常应用于abstract base class和interface中。
演示代码
注意:
RuntimeException定义的类为不需处理的类,而其他的例如IOException定义的类则必须处理,否则编译器会报错。
什么是异常
打开一个不存在的文件、网络连接中断、数组下标越界、正在加载的类文件丢失等都会引发异常。
Java中的异常类定义了程序中遇到的轻微的错误条件。
Java中的错误类定义了程序中不能恢复的严重错误条件。如内存溢出、类文件格式错误等。这一类错误由Java运行系统处理,不需要我们去处理。
异常处理
Java程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
注意事项
对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理。
如果父类中的方法抛出多个异常,则子类中的覆盖方法要么抛出相同的异常,要么抛出异常的子类,但不能抛出新的异常(注:构造方法除外)。
我们可以在方法声明时,声明一个不会抛出的异常,Java编译器就会强迫方法的使用者对异常进行处理。这种方式通常应用于abstract base class和interface中。
演示代码
]import io.* class Excep { Excep() throws ArithmeticException { } public int division(int a,int b) throws ArithmeticException,DivisorIsMinusException //Exception { //try //{ if(b<0) throw new DivisorIsMinusException("Divisor can't be minus"); return a/b; /*} catch (ArithmeticException e) { //e.printStactkTrace(); throw new Exception("can't divide by zero"); //捕获异常后可以不处理而直接抛出 //throw e; //return 0; }*/ } public int fn1(int a,int b)throws ArithmeticException,DivisorIsMinusException//Exception { return division(a,b); } } class ChildExcep extends Excep { //子类中的构造方法可以抛出父类没有的异常 ChildExcep() throws FileNotFoundException { } //子类中的覆盖方法不能抛出新的异常,否则会报错 public int division(int a,int b) throws ArithmeticException,DivisorIsMinusException//FileNotFoundException { return a/b; } } //定义自己的异常类 class DivisorIsMinusException extends Exception { DivisorIsMinusException(String str) { super(str); } } class ExcepTest { public static int method1(Excep excep) { try { return excep.division(5,0); } catch (ArithmeticException e) { System.out.println(e.toString()); } catch(DivisorIsMinusException ex) { System.out.println(ex.toString()); //System.exit(-1); } return 0; } public static void main(String[] args) { ChildExcep ce = new ChildExcep(); method1(ce); Excep excep = new Excep(); try { //excep.division(5,0); excep.fn1(5,-1); System.out.println("Exception"); //return; } catch (ArithmeticException e) { System.out.println(e.toString()); } catch(DivisorIsMinusException ex) { System.out.println(ex.toString()); System.exit(-1); } //ArithmeticException是Exception的子类,故要将具体的捕获类型放 //前面,而将通用的捕获类型放后面 catch(Exception e) { //打印异常信息的几种方法 //第1种 //System.out.println("can't divide by zero"); //第2种 //System.out.println(e.getMessage()); //第3种 //System.out.println(e.toString()); //第4种 //e.printStackTrace(); } //不管有没有抛出异常,fianlly里面的语句始终要执行 //finally可用于释放资源,关闭连接等 finally { System.out.println("finally"); } System.out.println("finish"); } }
相关文章推荐
- java学习笔记8——异常处理
- 【Java学习笔记】异常处理
- JAVA学习笔记26——异常机制2:常见异常+异常处理其余两种方法+自定义异常
- JAVA学习笔记整理四(异常处理)
- java学习笔记 异常处理
- Java学习笔记--------异常处理
- JAVA学习笔记(异常处理)
- Java学习笔记 12 异常处理
- java学习笔记9——异常处理
- 【Java学习笔记】17.异常处理
- JAVA学习笔记之(异常与异常处理)
- JAVA学习笔记(一)---异常处理
- 【Java学习笔记】异常处理
- Java学习笔记-6.Java异常处理
- 异常处理——毕向东Java基础教程学习笔记
- java学习笔记---java异常处理
- java学习笔记(10)-Java 异常处理
- java学习笔记七——异常处理
- 黑马程序员--学习笔记--Java异常处理
- Java学习笔记之异常处理