Java 将捕获由抛出引发的异常?
我对这个关键词有些怀疑。 我将通过我的例子来解释我的观点 从构造函数调用do1()方法,从do1()方法调用do2()方法 现在do2()可以抛出选中的异常“FileNotFoundException”。所以我声明并将其抛出到被调用的方法。 编译器再次要求我处理被调用的方法do2()和do2()的被调用方法构造函数。在构造函数(上次调用的方法)抛出它之后,如果出现任何异常,比如在do2()中找不到filepath,将在何处处理异常?我们只是抛出了它。我们没有捕获它。thorwing本身足以处理异常Java 将捕获由抛出引发的异常?,java,exception,Java,Exception,我对这个关键词有些怀疑。 我将通过我的例子来解释我的观点 从构造函数调用do1()方法,从do1()方法调用do2()方法 现在do2()可以抛出选中的异常“FileNotFoundException”。所以我声明并将其抛出到被调用的方法。 编译器再次要求我处理被调用的方法do2()和do2()的被调用方法构造函数。在构造函数(上次调用的方法)抛出它之后,如果出现任何异常,比如在do2()中找不到filepath,将在何处处理异常?我们只是抛出了它。我们没有捕获它。thorwing本身足以处理异
public Parent() throws FileNotFoundException {
System.out.println("Super");
do1();
}
void do1() throws FileNotFoundException{
do2();
}
void do2() throws FileNotFoundException{
FileReader f=new FileReader("C:/as");
}
您需要在文件阅读器周围尝试捕获块。这就是你如何“抓住”你的错误
try{
FileReader f = new FileReader("C:/as");
}catch(FileNotFoundException e){
//handle exception
}
这就是你需要的。据我所知,在方法行中有Stating抛出异常,所以作为程序员,您知道该方法中正在处理什么。该异常最终必须在某个地方处理,但它不必在您的
父类中。在您的情况下,调用newparent()
的方法可能会捕获异常,或者再次将其抛出到其调用方法
例如
try {
Parent p = new Parent ();
} catch (FileNotFoundException fnfe) {
// Handle exception
}
或者,你可以有类似的东西:
private Parent methodCreatingParent () throws FileNotFoundException {
return new Parent ();
}
private void someOtherMethod () {
try {
Parent p = methodCreatingParent ();
} catch (FileNotFoundException fnfe) {
// Handle exception
}
}
当抛出异常的方法(Parent()
)没有足够的上下文信息来正确处理异常时,将使用throws
关键字
编辑
根据@Hot Licks的评论,可能永远不会使用以下代码处理FileNotFoundException
:
public class TestClass {
public static void main (String[] args) throws FileNotFoundException {
Parent p = new Parent ();
}
}
在这种情况下,默认异常处理程序将自动处理异常。默认处理程序打印堆栈跟踪并停止应用程序。可以通过方法Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)指定要使用的处理程序
以上代码中没有引发任何异常。Robert:构建FileReader可能引发异常…异常从DefaultExceptionHandler捕获。在DefaultExceptionHandler中捕获。该处理程序的默认操作是结束应用程序。@HotLicks不带异常
实例,您必须处理它们。但是,对于RuntimeException
实例也是如此。throws
子句标识方法未处理的内容。对于方法中可能产生的每个选中异常,必须有一个catch
语句或相应的throws
子句。