1、异常
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。
- 例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
- 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。
- 例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
2、异常的体系
- Throwable
- Error
- 如 OutOfMemoryError
- 如 IOError
- Exception
- IOException
- 如 FileNotFoundException
- RunTimeException
- 如 NullPointException
- IOException
- Error
3、异常方法
- public String getMessage()
返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。 - public Throwable getCause()
返回一个 Throwable 对象代表异常原因。 - public String toString()
返回此 Throwable 的简短描述。 - public void printStackTrace()
将此 Throwable 及其回溯打印到标准错误流。。 - public StackTraceElement [] getStackTrace()
返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。 - public Throwable fillInStackTrace()
用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。
4、捕获异常
-
try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 }
5、多重捕获模块
- 一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。
6、finally关键字
- finally 关键字用来创建在 try 代码块后面执行的代码块。
- 无论是否发生异常,finally 代码块中的代码总会被执行。
- 在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
- 注意:
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
- 注意:
7、自定义异常
8、通用异常
-
在Java中定义了两种类型的异常和错误。
-
JVM(Java虚拟机) 异常:
- 由 JVM 抛出的异常或错误。
- 例如:NullPointerException 类,
- 例如:ArrayIndexOutOfBoundsException 类,
- 例如:ClassCastException 类。
- 由 JVM 抛出的异常或错误。
-
程序级异常:
- 由程序或者API程序抛出的异常。
- 例如 IllegalArgumentException 类,
- 例如:IllegalStateException 类。
- 由程序或者API程序抛出的异常。