java 复习笔记——异常处理
1)
对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理。
2)
如果父类中的方法抛出多个异常,则子类中的覆盖方法要么抛出相同的异常,要么抛出异常的子类,但不能抛出新的异常(注:构造方法除外)。
3)
我们可以在方法声明时,声明一个不会抛出的异常,Java编译器就会强迫方法的使用者对异常进行处理。这种方式通常应用于abstract base class和interface中。
4)
import java.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.printStackTrace();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{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;}return 0;}public static void main(String[] args) //throws Exception{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); //执行此句后,不执行finally语句//return;}catch(Exception e)//放到最后,先写具体的异常捕获{//System.out.println("can't divide by zero");//System.out.println(e.getMessage());//System.out.println(e.toString());e.printStackTrace();}finally//始终会被执行,除了在此之前执行了System.exit(-1);{System.out.println("finally");}System.out.println("finish");}}摘自:孙鑫老师java视频