-3

throws 関数に try/catch を入れた場合、例外が発生した場合、どちらが実行されますか?

  1. catch 句で何かを行うか、例外をスローするか、またはその両方を行いますか?

  2. さらに詳細を追加すると、内部スコープの例外が他のスコープから継承された場合、またはその逆の場合はどうなるでしょうか?

  3. 投稿にパラメーターが含まれていない場合、この機能は何ですか?

例 :

 public void doPost(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException{
        int number;
    try {
            number = Integer.parseInt(getParameter(req,"number"));
        } catch (Exception e) {
    number = 5;
        }
    }

getParameter は、HttpServlet を拡張する BaseServlet クラスの関数です。

protected String getParameter(HttpServletRequest req, String parameter)
    throws ServletException {
    String value = req.getParameter(parameter);
    if (isEmptyOrNull(value)) 
        throw new ServletException("Parameter " + parameter + " not found");

    return value.trim();
}
4

6 に答える 6

1

catch 句はException、try ブロックの本体でスローされたものを処理し、実質的にthrows宣言を無意味にします。

つまり、 への呼び出しが a をgetParameterスローする場合ServletExceptionnumberは 5 に設定され、その try-catch ステートメントの本体を超えて例外はスローされません。

于 2012-11-22T20:17:53.477 に答える
1

例外の処理 (try/catch を使用) と例外のダッキング (throws 節を使用) の両方を選択した場合、コンパイラは例外の処理を選択します。あなたの場合、例外をキャッチしてに割り当てます。5number

そして提案:

単一の catch ブロック内ですべての例外を処理するのは悪い習慣です。つまり、

catch(Exception e)

常にほとんどの特定の例外をキャッチします。

于 2012-11-22T20:19:29.437 に答える
0

getParameter()ServletException をスローします。のcatch句post(..)は、tryブロックの本体でスローされた例外を処理します

次の行を実行します。

number = 5;

しかし、私はあなたが数字で何をしているのかわかりません...

また、次のようにリファクタリングすることをお勧めします。

catch (ServletException e) {
    number = 5;
} 

あなたが期待している例外だけをキャッチしてください...

于 2012-11-22T20:17:57.093 に答える
0

そこに書かれていることを正確に行います:

  1. getParameter()投げますServletException

  2. この例外はgetParameter()

  3. 中にtry/catchdoPost()に挟まれる

  4. catchブロックは を呼び出して処理しnumber = 5ます。

于 2012-11-22T20:18:10.823 に答える
0

すべての例外をチャットしている
ので、すべて問題なければ。number は parseInt() から値を取得します。

それが何らかの例外 (通常は NumberFormatException、またはあなたの ServletException) をスローする場合は
、例外の原因に到達して取得します

値 5

于 2012-11-22T20:18:57.617 に答える
0

throwable が try ブロックによって引き起こされない限り、try-catch ブロックは常に実行されます。

于 2012-11-22T20:21:05.403 に答える