异常的概念:
指程序在执行过程中出现本身没有预料到的情况,从而导致程序错误结束,
但并不是所有的错误都是异常,并且错误有时候是可以避免的。
如打开一个不存在的一行
异常的分类:
- 异常发生的原因
(一些因用户错误引起,程序错误,物理错误引起)
-
- 用户输入了非法数据;
- 要打开的文件不存在
- 网络通信连接中断,JVM内存溢出
- 异常分类:
- 检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的,在编译时不能被简单的忽略。
- 运行时异常:运行时异常与检查性异常相反,可在编译时被忽略。
- 错误:是脱离程序员控制的问题,错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
Exception类的层次:
异常方法:
下面的列表是 Throwable 类的主要方法:
public String getMessage()
返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。
public Throwable getCause()
返回一个Throwable 对象代表异常原因。
public String toString()
使用getMessage()的结果返回类的串级名字。
public void printStackTrace()
打印toString()结果和栈层次到System.err,即错误输出流。
public StackTraceElement [] getStackTrace()
返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。
public Throwable fillInStackTrace()
用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。
异常的处理:
使用try{}catch{}关键字可以捕获异常,放在异常可能发生的地方。
throws/throw 关键字:
如果一个方法没有捕获一个异常,那么该方法必须使用throws关键字来声明,也可以使用throw关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
finally关键字:
- finally 关键字用来创建在 try 代码块后面执行的代码块。
- 无论是否发生异常,finally 代码块中的代码总会被执行。
- finally代码块中的语句先去catch执行,因此最好不要在该语句块中使用return。
声明自定义异常:
在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。
- 所有的异常都必须是Throwable的子类
- 如果希望写一个检查性异常类,则需要继承Exception类。
- 如果希望写一个运行时异常类,则需要继承RuntimeException类。
- 只继承Exception类来创建的异常类是检查性异常类。