0
try {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    str = br.readLine();
    i = Integer.parseInt(str);
} catch(NumberFormatException e) {
    System.out.Println("enter a valid input");
}

このコードをコンパイルしようとすると、ioexceptionが発生しているというコンパイルエラーがスローされます。これをキャッチする必要があります。

したがって、ステートメントを追加する必要catch(IOException e)がありますが、発生する例外はjava.langライブラリの数値形式の例外であるため、なぜキャッチする必要があるのですかioException

4

4 に答える 4

5
str=br.readLine();

BufferedReader.readLine()はIOExceptionをスローます。

public String readLine() throws IOException

スロー:IOException-I/Oエラーが発生した場合

IOExceptionはチェックされた例外であるため、try / catchブロックを使用して処理するか、throws句を使用して宣言する必要があります。

try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str=br.readLine();
i=Integer.parseInt(str);
}catch(IOException e)
{System.out.println("IOException occured... " + e.printStacktrace());
catch(NumberFormatException e)
{System.out.println("enter a valid input");
}

Java 7の場合複数のキャッチ:

try
    {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    str=br.readLine();
    i=Integer.parseInt(str);
    }
catch(IOException | NumberFormatException ex) {
System.out.println(ex.printStackTrace())
}
于 2013-02-26T13:20:11.327 に答える
0

なぜなら、

bufferedReader.readLine ()

チェック例外である IOException をスローします。チェックされたすべての例外は、try catch ブロック内にある必要があります。IOException またはジェネリック Exception のいずれかをキャッチできます。コード スニペットを以下に示します。また、NumberFormatException はランタイム例外です。必要でない限り、キャッチする必要はありません。

try {
     String str = bufferedReader.readLine ();
} catch (IOException ie) {
     ie.printStacktrace();
}


try {
     String str = bufferedReader.readLine ();
} catch (Exception ie) {
     e.printStacktrace();
}
于 2013-11-18T08:10:45.760 に答える
0

BufferedReader.readLineIOExceptionI/O エラーが発生した場合にスローできます。

于 2013-02-26T13:21:23.390 に答える
0

この行を使用する str=br.readLine(); IOException が発生する可能性があります

于 2013-02-26T13:25:01.723 に答える