throws与throw
程序员文章站
2022-07-14 10:40:49
...
throws 声明抛出异常
当前方法不知道如何处理这种类型的异常,该异常应该由上一层调用者处理,
main方法也不知道如何处理这种类型的异常,也可以通过throws声明抛出,
交给jvm处理,jvm对异常处理方法:1、打印异常跟踪信息,2、终止程序执行
//从下往上看
public class LearnThrow {
//main方法也向外抛出了异常,将异常交给jvm处理,即直接停止程序执行
public static void main(String args[]) throws IOException{
//getFile()方法向外抛出了输入输出流异常,main方法需要处理该异常
getFile();
}
//定义方法时声明向外抛出异常
public static void getFile() throws IOException {
//所以方法中用FileInputStream类需要有接收、处理FileNotFoundException异常,
FileInputStream file = new FileInputStream("panda.txt");
}
}
//FileInputStream源码,构造函数向外抛了文件找不到异常
public FileInputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null);
}
throw :手动抛出异常
手动抛出一个异常对象,可以抛出checked异常(编译时异常),也可以抛出Runtime异常(运行时异常)
如果抛出的是checked 异常:
1、要么throw语句要在try{}catch{}块中显示地捕获异常
2、要么所在方法throws声明将异常抛出去,抛给方法调用者
如果抛出的是Runtime异常:
可以用try{}catch{}显示捕获处理异常,也可以直接忽略,默认交给方法调用者
//main方法选择抛给jvm
public static void main(String[] args) throws Exception{
//方法定义向上抛抛出异常了,main方法还是要处理
throwChecked(33);
throwRunTime(33);
}
//也用throws声明往外抛了,此时throws用不到,因为异常对象已经被catch捕获处理了
public static void throwChecked(int a) throws Exception{
if (a>0){
try {
//抛出checked异常,我们用try{}catch{]显示捕获了
throw new Exception("a值不符合要求。。");
} catch (Exception e) {
System.out.println("手动抛出的异常"+e.getMessage());
}
}
}
public static void throwRunTime(int a){
if(a >0){
//手动抛出运行时异常,不做处理,交给调用方法者处理
throw new RuntimeException("a值不符合要求。。");
}
}
上一篇: 总结throw与throws
下一篇: Java throw 和 throws