-1

我对 throws 关键字有一些疑问。我将通过我的例子来解释我的。

从构造函数我调用 do1() 方法,从 do1() 方法我调用 do2() 方法。

现在 do2() 可以抛出检查异常“FileNotFoundException”。所以我声明并把它扔给被调用的方法。编译器再次要求我处理被调用的方法do2()和do2()的被调用方法构造函数。在构造函数(最后调用的方法)抛出它之后,如果发生任何异常,例如在do2()中找不到文件路径,则将处理异常?我们只是抛出它。我们没有抓住它。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");
    }
4

2 回答 2

2

异常最终必须在某个地方处理,但它不必在您的Parent班级中。在您的情况下,调用的方法new Parent ()可能会捕获异常,或者将其再次抛出给它的调用方法。

例如

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
    }
}

throws抛出异常的方法(Parent ()在您的情况下)没有足够的上下文信息来正确处理异常时,使用关键字。

编辑

根据@Hot Licks 的评论,可以FileNotFoundException使用以下代码从不处理 :

public class TestClass {
    public static void main (String[] args) throws FileNotFoundException {
        Parent p = new Parent ();
    }
}

在这种情况下,默认异常处理程序将自动处理异常。默认处理程序打印堆栈跟踪并停止应用程序。要使用的处理程序可以通过方法指定Thread.setDefaultUncaughtExceptionHandler (Thread.UncaughtExceptionHandler eh)

于 2013-08-28T18:42:11.193 回答
-2

你需要在你的 fileReader 周围尝试 catch 块。这就是你如何“捕捉”你的错误。

try{
    FileReader f = new FileReader("C:/as");
}catch(FileNotFoundException e){
    //handle exception
}

这就是你所需要的。据我所知,在方法行中声明会引发异常,因此作为程序员的您知道方法中正在处理什么。

于 2013-08-28T16:26:06.117 回答