Throwable是异常类的超类,它下面可以分为两大子类,一个就是Error类,一个就是Exception类。
Error类是一个错误类,是无法补救的,如栈溢出、内存溢出等;
而Exception类是一个异常类,Exception异常类可以分为两大子类:
一、受检查异常(是除去下述的RuntimeException异常的所有异常)
此类异常是不可通过编译的,被调用的方法后接有throws关键字和异常处理类。要想通过编译必须用try……catch语句或抛出异常。
例如:
public static void main(String[] args) {
java.io.File file = new java.io.File("E:\\");
try{
FileInputStream fin = new FileInputStream(file);
}catch(Exception ef){
ef.printStackTrace();
}
}
二、RuntimeException运行是异常
此类异常是可以通过编译的,并且被调用方法并没有throws关键字,可不用try……catch语句捕获,也可用try……catch语句捕获异常。
例如:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!!!");
try{
System.out.println(1/0);
}catch(ArithmeticException e){
System.out.println("除数为0!");
}
System.out.println("除数为零后程序没有终止啊,呵呵!!!");
}
}
1/0在运行是出现除数为零的异常,catch(ArithmeticException e)是捕获该异常的,所以程序会执行catch语句的代码,注意:执行catch语句的代码并不会终止程序的运行,只是转变一下方向罢了。
注意:catch的参数是捕获try中该类型参数的异常的,也就是说,如果try中没有出现该类型参数的异常,不论是否出现其他类型的异常,均不会去执行catch中的代码。
例如:将上述代码中main函数改为
public static void main(String[] args) {
java.io.File file = new java.io.File("E:\\新建文本.txt");
System.out.println("Hello World!!!");
try{
FileInputStream fin = new FileInputStream(file);
System.out.println(1/0);
}catch(java.io.FileNotFoundException e){
System.out.println("除数为0!");
}
System.out.println("除数为零后程序没有终止,呵呵!!!");
}
该程序并不会执行异常。
throws与throw关键字:
throw关键字是用于抛出异常,是一个独立的语句,格式为:
throw new Throwable();
而throws关键字是声明方法中可能产生的若干个异常,在方法中用throw关键字抛出这些异常,所以throws关键字是接在方法之后的,格式为:
方法返回值类型 方法名([参数列表]) throws 异常列表
如果一个方法中调用了一个会抛出异常的方法,那么究竟是该try……catch呢,还是throws呢?这就要看被调用方法中所抛出的异常是是该有本方法来处理还是由调用本方法的上级语句处理,若本方法不处理则将异常抛向上级调用者,这是就应该在调用者那里使用try……catch进行捕捉处理,而本方法后使用throws关键字,如果由本方法自行处理,则在该方法中使用try……catch直接处理。
参考文献:http://sgl124764903.iteye.com/blog/700041