异常
文章目录
- 异常
- try-catch-finally
- 函数名声明时抛出
- 自定义异常类
- 关于自定义对象的输出信息
异常分为两种,一种编译时异常,是一定要进行处理的,不然编译都不会过,一种是运行时异常,比如索引越界,算术异常,空指针异常等,这种在编译的时候不会报错,而是在运行到这行代码才会报错。
一种是在函数内部进行处理,用try-catch或者try-catch-finally来处理。
处理异常的方法也有两种,一种是在函数声明的时候抛出,然后由函数调用者进行异常处理。
try-catch-finally
publicclassException{publicstaticvoidmain(String[]args){try{intresult=divide(4,0);System.out.println(result);}catch(ArithmeticExceptione){System.out.println("算术异常:"+e.getMessage());//System.exit(0);}finally{System.out.println("除了jvm关闭以外一定会处理的finally");}System.out.println("try catch 外");}publicstaticintdivide(intx,inty){intresult=x/y;returnresult;}}运行结果
无System.exit(0): 算术异常:/by zero 除了jvm关闭以外一定会处理的finallytrycatch外 有System.exit(0);算术异常:/by zero函数名声明时抛出
在函数声明抛出,没有进行处理,则程序在检测到异常的时候直接抛出然后不进行后面代码
publicclassException{publicstaticvoidmain(String[]args){intresult=divide(4,0);System.out.println(result);System.out.println("divide 后的代码");}publicstaticintdivide(intx,inty)throwsArithmeticException{intresult=x/y;returnresult;}}//结果Exceptionin thread"main"java.lang.ArithmeticException:/by zero atException.divide(Exception.java:23)atException.main(Exception.java:17)在函数声明抛出,在调用处处理,程序在抛出异常后仍然会进行下面的代码
publicclassException{publicstaticvoidmain(String[]args){try{intresult=divide(4,0);System.out.println(result);System.out.println("divide 后的代码");}catch(ArithmeticExceptione){System.out.println("异常:"+e.getMessage());}System.out.println("try-catch后面的代码");}publicstaticintdivide(intx,inty)throwsArithmeticException{intresult=x/y;returnresult;}}//结果异常:/by zerotry-catch后面的代码自定义异常类
classDivideByMinusExceptionextendsException{//无参构造publicDivideByMinusException(){super();}//有参构造publicDivideByMinusException(Stringmessage){super(message);}}publicclassmyException{publicstaticvoidmain(String[]args){intresult=0;try{result=divide(4,-1);System.out.println(result);}catch(DivideByMinusExceptione){System.out.println(e.getMessage());}}//抛出异常publicstaticintdivide(intx,inty)throwsDivideByMinusException{if(y<0){//自定义异常信息//这个自定义异常信息就是构造一个新对象把值传进去,只要传递对的参数进去就行。thrownewDivideByMinusException("除数是负数");}elseif(y==0){thrownewDivideByMinusException("除数是零");}returnx/y;}}结果//result=divide(4,-1)除数是负数//result=divide(4,0);除数是零//result=divide(4,1);4关于自定义对象的输出信息
来自菜鸟教程//自定义异常类,继承Exception类publicclassInsufficientFundsExceptionextendsException{//此处的amount用来储存当出现异常(取出钱多于余额时)所缺乏的钱privatedoubleamount;//need传递到这里来(need在下面异常处理里)publicInsufficientFundsException(doubleamount){this.amount=amount;}//使用提示信息的时候就用e.getAmount来获取需要的金额publicdoublegetAmount(){returnamount;}}// 文件名称 CheckingAccount.javaimportjava.io.*;//此类模拟银行账户publicclassCheckingAccount{//balance为余额,number为卡号privatedoublebalance;privateintnumber;publicCheckingAccount(intnumber){this.number=number;}//方法:存钱publicvoiddeposit(doubleamount){balance+=amount;}//方法:取钱publicvoidwithdraw(doubleamount)throwsInsufficientFundsException{if(amount<=balance){balance-=amount;}else{doubleneeds=amount-balance;//这里的need传进去创建对象thrownewInsufficientFundsException(needs);}}//方法:返回余额publicdoublegetBalance(){returnbalance;}//方法:返回卡号publicintgetNumber(){returnnumber;}}