Java 将捕获由抛出引发的异常?

Java 将捕获由抛出引发的异常?,java,exception,Java,Exception,我对这个关键词有些怀疑。 我将通过我的例子来解释我的观点 从构造函数调用do1()方法,从do1()方法调用do2()方法 现在do2()可以抛出选中的异常“FileNotFoundException”。所以我声明并将其抛出到被调用的方法。 编译器再次要求我处理被调用的方法do2()和do2()的被调用方法构造函数。在构造函数(上次调用的方法)抛出它之后,如果出现任何异常,比如在do2()中找不到filepath,将在何处处理异常?我们只是抛出了它。我们没有捕获它。thorwing本身足以处理异

我对这个关键词有些怀疑。 我将通过我的例子来解释我的观点

从构造函数调用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
子句。