4

中間テストで間違った質問を見て、これは私に疑問を抱かせます:

public double[] readInputFile(String fielane) throws IOException
{
  File inputFile = new File(filename);
  Scanner in = new Scanner(inputFile);
  try
  {
    readData(in);
    return data;
  }
  finally
  {
    inputFile.close();
  }
}

これはすべての例外をパスしてチェーンをバックアップしますか、それともチェックされたIOExceptionのみをパスしますか?

4

3 に答える 3

5

ブロックが実行されてから、最初にスローされたfinally例外(つまり、の結果としてスローされた最初の例外readData(in))が浸透します。

この質問の警告は、浸透する例外のタイプに関するものだと思います。これはIOException、、または任意の種類のチェックされていない例外(つまり、java.lang.RuntimeExceptionまたはのサブクラスjava.lang.Error)のいずれかである可能性があります。

@zaplのコメントに従って編集:ブロックが(の結果として)をfinallyスローした場合、ブロックが例外をスローしたかどうかに関係なく、その例外は呼び出し元に浸透します。IOExceptioninputFile.close()try

于 2012-12-08T01:38:06.867 に答える
1

ブロック内のコードは、上finallyのブロック内で例外が発生したかどうかに関係なく、常に実行されますtry

あなたの例では、finallyブロックは入力ファイルを確実に閉じます。したがって、例外がスローされた場合でも、接続が開いたままにならないことが保証されます。

于 2012-12-08T01:39:55.147 に答える
1

これはチェーンをバックアップするすべての例外を渡しますか、それともチェック済みの IOException のみを渡しますか?

すべての例外を渡しますが、コードをコンパイルするには、そのサブクラスreadDataのみをスローするように宣言する必要があります。IOException

ブロックは、通常どおり、ブロックの後finallyに実行されます。try

于 2012-12-08T01:42:22.100 に答える