JavaSE异常Exception处理方法以及自定义
作者:鸽鸽程序猿
异常是什么
异常就是程序在进行时的不正常行为,就像之前数组时会遇到空指针异常(NullPointerException),数组越界异常(ArrayIndexOutOfBoundsException)等等。
在java中异常由类来表示。
异常的分类
异常有一个顶层类Throwable;
Throwable派生出两个子类Error,Exception;
Error指的是Java虚拟机无法解决的严重问题,例如递归时一直开辟栈,导致栈溢出的错误。
Exception也分为两种异常:编译时异常和运行时异常。
编译时异常,这种异常顾名思义是在编译时候就会发生,这种异常要在程序中捕获声明才能让程序通过。
例如在比较器文章这篇中要实现clone方法时要通过throws关键字声明CloneNotSupportedException异常才能正常使用。
运行时异常,这种异常全在(RunTimeException)这个类和其子类之下,编译通过,运行报错,这种异常可以交给JVM处理。
异常的处理方法
异常的处理一般使用throw、try、catch、finally、throws这五个关键字。
throw抛出异常
在程序执行时,该语句引发异常,此时就可以通过throw抛出异常来告诉程序员原因。
一般格式为throw new 异常类名("异常产生的原因"); 例如我们进行方法传参为数组时参数是null抛出空指针异常:
public void printArray(int[] array){ if(null == array){ throw new NullPointException("数组传参为空null"); }else{ // } }
注意事项:1.异常的抛出必须是在方法的内部
2.一旦异常抛出成功之后,在该语句之后的代码就不会执行了。就像上面写的else里面的语句不会执行了。
3.抛出的异常必须是Exception的或其子类,编译时异常必须在后续代码中处理,运行时异常可以交给JVM处理。
异常的声明
异常的声明就是告诉这个方法会报哪些异常,然后在这个方法内部不用对异常处理,让后面使用这个方法时对异常进行处理。
一般格式:
修饰符 返回值类型 方法名(参数表列) throws 异常类型1,异常类型2...{ }
注意事项:1.格式不能变,一定是将声明放在参数表列后面,可以多个异常同时声明
2.声明的异常必须是Exception的或其子类。如果声明的异常是具有父子类关系,只声明父类也可以
异常的捕获和处理
使用try-catch语句来对异常进行捕获和处理。
使用格式:
try{ //会产生异常的代码 }catch(异常类型1 e){ //对异常的处理代码 }catch(异常类型2 e){ //对异常的处理代码 }
注意事项:
1.像前面一样如果try中抛出异常后还有代码就不会执行,
2.catch语句之间就像if-else语句一样,只会执行其中一个异常,
3.如果try中抛出异常被catch捕获并处理了那就会执行try-catch之后的语句,如果没有捕获到就不会执行
4.如果两个异常是父子类,一定要把子类异常catch放在前面
5.如果两个异常处理方式一样也可以用单竖杠 | 来处理catch(异常类型1 | 异常类型2 e){}但是这样就不知道具体是哪个异常了。
finally
这个语句是跟try-catch语句一起用的,这个语句的特点就是比catch先执行,里面常放一些资源关闭代码
格式:
try{ //会产生异常的代码 }catch(异常类型1 e){ //对异常的处理代码 }catch(异常类型2 e){ //对异常的处理代码 }finally{ //资源关闭代码 }
try 或者 catch 中如果有 return 会在这个 return 之前执行 finally. 但是如果
finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return.
自定义异常类
异常本质就是一个类,然后继承于已有的异常类。在写自己的异常类时类名最后一个单词使用Exception更加规范
格式:
class NameException extends 异常类{ // }
自定义异常类时一般继承Exception 或 RunTimeException。
继承Exception默认是编译时异常,
继承RunTimeException是运行时异常,
在自定义异常类中一般会实现如下的一个构造方法,来报出什么原因导致异常:
public NameException(String message) { super(message); }
总结
到此这篇关于JavaSE异常Exception处理方法以及自定义的文章就介绍到这了,更多相关JavaSE异常Exception内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!