java 异常详解及应用实例
java 异常
异常的使用实例(异常分类:Error(是由JVM调用系统底层发生的,只能修改代码)和Exception(是JVM发生的,可以进行针对性处理))
1.如果一个方法内可能出现异常,那么可以将异常通过throw的方式new出相应的异常类,并在方法上 声明throws可能抛出的异常类抛给调用者,调用者可以进行异常捕获,或者继续抛出异常由上层调用者继续处理, 如果整个过程都没有将异常进行任何处理,那么将由JVM虚拟机进行默认的处理
2.调用者可以对异常进行try()catch(){}的异常处理,也可以继续在方法后面throws该异常,catch代码块中 如果不处理也可以进行throw该异常
3.运行时异常RuntimeException可以不进行显式的异常声明
4.如果父类中的方法抛出了异常,如果子类对方法进行重写后也抛出异常,那么该异常必须不能大于父类的异常类, 如果父类中方法没有抛出异常,而子类中覆盖的方法却抛出了异常,那么此时只能进行trycatch来捕获此异常,但是也可以将此异常在catch代码块中throw newRuntimeExcetion()进行抛出,这样方法不用进行throws声明
5.很多时候异常并不需要调用者进行处理,调用者不一定具有处理能力
6.异常应该包装成上层调用者可以识别的异常类型,面向不同的调用者,报告不同的异常信息,否者调用者不知道如何处理该异常
在开发中这点十分重要
7.finally代码块中常常进行资源的释放及关闭操作,对于打开的资源应该进行反方向的关闭操作,因为资源可能存在依赖性
8.如果不进行声明异常,那么目的是不让调用者进行处理,让调用者的程序停止,这样必须修改错误代码
publicclassExceptionDemo{ publicstaticvoidmain(String[]args){ //OutOfMemoryError内存溢出错误, int[]i=newint[1024*1024*1024]; System.out.println(i[1]); //ArrayIndexOutOfBoundsException索引越界异常 int[]s=newint[2]; System.out.println(s[2]); Calccalc=newCalc(); //假如我们在这里捕获异常 try{ calc.run(4,0); calc.run(4,-1); }catch(NegativeExceptione){//必须先抛出异常的自定义子类 e.printStackTrace(); System.out.println(e.getMessage()); //throwe;//可以继续将此异常抛出 }catch(ArithmeticExceptione){//抛出自定义异常类的父类 e.printStackTrace(); System.out.println(e.getMessage()); //throwe; }finally{ System.out.println("finally肯定会执行到"); } //如果上面进行了异常捕获,那么代码可以继续执行,否者代码不能继续执行 System.out.println("可以执行到!"); try{ calc.run(4,-1); }catch(NegativeExceptione){ e.printStackTrace(); System.out.println(e.getMessage()); return; }finally{ System.out.println("肯定会执行的"); } System.out.println("执行不到了");//执行不到此行代码 } } /** *自定义异常 */ classNegativeExceptionextendsArithmeticException{ publicNegativeException(){ } publicNegativeException(Stringmsg){ super(msg); } } interfaceAA{ publicabstractvoidmethod(); } classCalcimplementsAA{ //ArithmeticException其实为运行时异常(RuntimeException),即使不进行throws声明,也可以通过编译 publicintrun(intm,intn)throwsArithmeticException,NegativeException{ if(n==0){ thrownewArithmeticException("除数不能为0"); }elseif(n<0){ thrownewNegativeException("除数不能为负数"); } ints=m/n; returns; } @Override publicvoidmethod(){ try{ intp=4/0; }catch(ArithmeticExceptione){ e.printStackTrace(); thrownewRuntimeException();//将异常继续抛出为运行时异常 } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!