0

私はいくつかのトレーニング資料を使用している Java の初心者であり、これは質問の 1 つです。

有効な DateFormat オブジェクト df が与えられ、かつ

Date d = new Date(0L);
String ds = "December 12, 2012";
//Insert correct code here

ds で表される日付で d の値を更新するのは何ですか?

A. d = df.parse(ds);
B. d = df.getDate(ds);
C. try{
        d = df.parse(ds);
       }
   catch(ParseException e){ };

正解は C です。なぜそうなるのでしょうか。AとCの違いは何ですか?

4

4 に答える 4

2

parse()はParseExceptionをスローする可能性があり、それはチェック済みの例外であるためです。Checked Exceptions は、呼び出し元のコードでtry-catchブロックを使用して処理するか、コードで throws 句を使用して Exception をスローできることを宣言する必要があります。

チェック例外は、Java の設計者が、何らかの方法でプログラムが絶対に提供する必要があると感じている例外です。チェック例外をスローする可能性のあるステートメントをコーディングするときはいつでも、プログラムは次の 2 つのいずれかを行う必要があります。

  1. 例外の catch ブロックを持つ try ステートメント内にステートメントを配置して、例外をキャッチします。

  2. ステートメントを含むメソッドに throws 句を指定して、メソッドが例外を処理しないことを示します。したがって、例外は行の上に渡されます。

より良いコードは次のとおりです。

try{
    d = df.parse(ds);
   }
catch(ParseException e){   
   e.printStackTrace();
   // log the exception
   throw new RuntimeException(e);
}

Checked Exceptions の詳細については、これをお読みください

于 2013-07-10T20:35:27.533 に答える
1

問題のコードが見つかった場合:

  1. checked を宣言しないメソッドでParseExceptionおよび
  2. それをキャッチするtry-catchブロックの外側で、

次に、 A はコンパイラ エラーを返します: Uncaught exception ParseException: must be caught or declared to be thrown.

ただし、文字どおり//Insert correct code hereC のコードに置き換えて、その後の変数を実際に読み取ろdうとすると、エラーが発生しますlocal variable may not have been initialized

空のキャッチブロックと、その後の面白いセミコロンは言うまでもありません...

一言で言えば、これはあなたが扱わなければならない非常に悪い素材です。

于 2013-07-10T20:35:46.427 に答える
1

parseメソッドはチェック例外をスローします(ParseExceptionこれはRuntimeExceptionではありません)。そのため、キャッチする必要があります。そうしないと、コンパイル エラーになります。

于 2013-07-10T20:35:39.290 に答える