继上一篇exception
使用thows声明抛出异常
使用throws声明出异常的思路是,当前的方法不知道如何处理这种类型的异常,还异常应还有上一级调用者处理,如果main方法也不知道如何处理这种类型的异常也可以使用thows抛出异常该异常交给JVM处理JVM异常处理的方法是,打印异常的跟踪栈信息并终止程序的运行,这就是前面程序在遇到异常之后自动结束的原因。
throws声明抛出只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间使用逗号隔开语法格式:
thows ExceptionClass1,ExceptionClass2.。。。
需要注意的是一旦使用throws语句声明抛出该异常那么将不能使用try/catch块捕获异常
例如:
public class ThrowTest{
public static void main(String [] args)throws IOException{
FileInputeStream fis = new FileInputStream("a.txt");
}
}
如上名的程序如果一旦程序遇到异常那么JVM将会打印该异常的跟踪栈信息并结束程序并不会处理IOException
如果某代码中调用了一个带throws声明的方法,该方法声明抛出了checked异常,则表明该方法希望他的调用者来处理异常。也就是说,调用该方法时要么放在一个try块中显示的捕获该异常要么就是放在另一个throws中:如下
public class ThrowsTest2{
public static void main(String args【】)throws Exception{
test();
}
public static void test()throws IOException{
FileInputeStream fis = new FileInputStream("a.txt");
}
}
使用throws抛出异常有两个条件限制:
1:子方法中抛出的异常一定要是父方法中异常的子类或者是相同
2:字方法中抛出的异常一定要比父方法中的异常少
如果违背类这两条原则的话那么将会出现编译无法通过
2由此可见checked异常存在两大缺点
1:如果是checked的异常那么必须进行(显示的)异常的捕获不然将不能通过编译
2:如果在方法中显示声明抛出checked异常将会导致方法签名与异常耦合如果该方法是重写的父方法该方法抛出的异常还会受到父方法异常的限制
所以基于以上说明程序中应该尽可能少的使用checked异常而应使用Runtime异常将会更加简洁。
在使用runtime异常的时候不用在方法中声明抛出checked异常,一旦发生了自定义错误程序只管抛出Runtime异常即可。
如果程序要在合适的地方捕获异常并对异常进行处理一样可以使用try/catch对异常进行捕获
runtime异常的优势:
可以使我们真正得享受正常代码和错误处理代码的分离保证程序有较好的健壮性。