1、异常分类
Throwable
是java语言 中所有错误和异常的超类(万物即可抛]。它有两个子类: Error. Exception。
-
异常种类
- Error
Error
为错误,是程序无法处理的,如OutOfMemoryError
.ThreadDeath
等 ,出现这种情况你唯- -能做的就是听之任之,交由JVM
来处理,不过JVM
在大多数情况下会选择终止线程。 - Exception
Exception
是程序可以处理的异常。它又分为两种:CheckedException
(受捡异常) 、UncheckedException
(不受检异常)。CheckException
发生 在编译阶段,必须要使用try.. .catch
(或者throws
)否则编译不通过。UncheckedException
发生在运行期 ,具有不确定性,主要是由于程序的逻辑问题所引起的,难以排查,我们一般都需要纵观全局才能够发现这类的异常错误,所以在程序设计中我们需要认真考虑,好好写代码,尽量处理异常,即使产生了异常,也能尽量保证程序朝着有利方向发展。
- Error
-
常见异常的基类
lOException
RuntimeException
-
常见的异常
2、异常处理
2.1 捕获异常
try{
}catch(Exception1 e){
}catch(Exception2 e){
}finally{
}
【注意事项】
- 即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
- finally语句块只有一种情况是不会执行的,那就是在执行finally之前遇到了System.exit(0)结束程序运行。
2.2 异常声明(throws子句)
1、当
CheckedException
产生时,不一定立刻处理它,可以再把异常throws
出去。2、在方法中使用
try-catch-finally
是由这个方法来处理异常。但是在一些情况下,当前方法并不需要处理发生的异常,而是向上传递给调用它的方法处理。3、如果一个方法中可能产生某种异常,但是并不能确定如何处理这种异常,则应根据异常规范在方法的首部声明该方法可能抛出的异常。
4、如果一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常,之间以逗号隔开。
示例
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test9 {
public static void main(String[] args) {
try {
readFile("joke.txt");
} catch (FileNotFoundException e) {
System.out.println("所需文件不存在!");
} catch (IOException e) {
System.out.println("文件读写错误!");
}
}
public static void readFile(String fileName) throws FileNotFoundException,
IOException {
FileReader in = new FileReader(fileName);
int tem = 0;
try {
tem = in.read();
while (tem != -1) {
System.out.print((char) tem);
tem = in.read();
}
} finally {
in.close();
}
}
}
3、自定义异常
-
在程序中,可能会遇到JDK提供的任何标准异常类都无法充分描述清楚我们想要表达的问题,这种情况下可以创建自己的异常类,即自定义异常类。
-
自定义异常类只需从Exception类或者它的子类派生一个子类即可。
-
自定义异常类如果继承Exception类,则为受检查异常,必须对其进行处理;如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。
-
习惯上,自定义异常类应该包含2个构造器:
- 一个是默认的构造器,
- 另一个是带有详细信息的构造器。
/**IllegalAgeException:非法年龄异常,继承Exception类*/
class IllegalAgeException extends Exception {
//默认构造器
public IllegalAgeException() {
}
//带有详细信息的构造器,信息存储在message中
public IllegalAgeException(String message) {
super(message);
}
}