java——异常处理
java中的所有异常类都是Throwable的子类,这些子类主要分为两部分
1. Throwable——Exception (一些常见的异常如下)
Throwable——Exception——IOException——EOFException 文件到达末尾,试图继续读取
Throwable——Exception——IOException——FileNotFoundException 试图打开一个不存在的文件
Throwable——Exception——RuntimeException——ArrithmeticException 算数条件异常,比如除数为0
Throwable——Exception——RuntimeException——MissingResourceException 缺少资源,试图访问不存在的资源
Throwable——Exception——RuntimeException——ClassNotFoundException 试图使用一个并不存在的类
Throwable——Exception——RuntimeException——NullPointerException 访问空引用
Throwable——Exception——RuntimeException——illegalArgumentException 不合法的参数异常
Throwable——Exception——RuntimeException——ArrayIndexOutOfBoundsException 试图访问不存在的数组元素
Exception及其子类:使用try,catch进行异常的捕获和处理
2. Throwable——Error(一些常见错误)
Throwable——Error——VirtulMachineError——StackOverFlowError
Throwable——Error——VirtulMachineError——OutOfMemoryError
Throwable——Error——AWTError (AWT:使用操作系统中的图形函数的抽象窗口工具,C/C++编写,另一个常用的是Swing组件,纯java编写)
Error及其子类:系统内部的错误,错误一旦产生,程序一般便没有机会进行捕获和处理了。这类错误通常是由于java虚拟机运行错误,比如Virtual MachineError或者OutOfMemoryError等,而不是程序运行错误。
可检查异常:如常见的IOException异常,这类异常编辑器要求必须处理,否则不能通过编译,可以使用try-catch来进行捕获,或者直接throws抛出异常(声明异常越具体越好)
不可检查异常(运行时异常):RuntimeException及其子类,在编译时不会检查,运行时会抛出,需要尽量避免(Error也属于运行时异常)
try——catch——finally
try:用于捕获异常,后面可以有多个catch。如果没有catch,一定要有finally
catch:异常捕获,尽量将异常明确,可以具体分为多个异常来处理。
finally:最终处理,无论是否有捕获异常或者是否进行了异常处理,finally都会在try——catch的返回之前处理,如果finally中有return,则不在执行try——catch中的返回。
以下情况,finally不会被执行
1. 在执行finally之前遇到了System.exit()
2. 线程已经死亡
3. finally语句块中出现异常
4. CPU关闭
throw抛出异常
try{ //执行语句 }catch(IOException e){throw new Exception();}
在函数体中抛出异常,之后程序会立即终止,然后在包含它的try块中,从里向外寻找匹配的catch块进行处理。如果所有方法都层层上抛异常,最终JVM会进行处理,进行异常消息的打印,保存堆栈信息。
throws抛出异常
public static void main(String[] args){ throws IOException{ //执行语句 } }
throw是针对对象抛出的异常,而throws则是针对方法抛出的异常。在java中,一个异常产生后,会按照调用层次向上冒泡,直到被try-catch块处理,或者达到main()方法为止