-1

throws キーワードに疑問があります。私の例を通して説明します。

コンストラクターから do1() メソッドを呼び出し、do1() メソッドから do2() メソッドを呼び出しています。

do2() は、チェック済み例外「FileNotFoundException」をスローできるようになりました。だから私はそれを宣言して、呼び出されたメソッドに投げます。そして再び、呼び出されたメソッド do2() および do2() の呼び出されたメソッド コンストラクターで処理するように求めるコンパイラ。スローしただけで、キャッチしませんでした。例外を処理するには、スローするだけで十分です。

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 に答える