0

この質問はインタビューで私に尋ねられました。以下のスニペットでは、tryブロックの3行目で例外が発生しています。問題は、4行目をどのように実行させるかでした。3行目は、catchブロック自体にある必要があります。彼らは私に「スローとスローを使用する」というヒントを与えてくれました。

    public void testCase() throws NullPointerException{
        try{
            System.out.println("Start");
            String out = null;
            out.toString();
            System.out.println("Stop");

        }catch(NullPointerException e){
            System.out.println("Exception");
        }
    }

誰でも助けることができます。前もって感謝します。

4

3 に答える 3

6

まず、例外はtryブロックの3out.toString()行目( 2行目ではなく、)で発生します。

そして、私はあなたが4行目を実行したいと思っています(つまり、印刷停止)

単に停止を印刷したい場合は、次の行(印刷停止)を実行するさまざまな方法があります。

 public static void testCase() throws NullPointerException{
        try{
            System.out.println("Start");
            String out = null;
            out.toString();
            System.out.println("Stop");

        }catch(NullPointerException e){
            System.out.println("Stop");
            System.out.println("Exception");
        }
    }

またはそのヒントを与えられた

3行目はキャッチブロック自体にある必要があります

 public static void testCase() throws NullPointerException{
        try{
            System.out.println("Start");
            String out = null;
            Exception e = null;

            try
            {
                out.toString();
            }
            catch(Exception ex)
            {
                e = ex;
            }
            System.out.println("Stop");

            if(e != null)
                throw e;

        }catch(Exception e){
            System.out.println("Exception");
        }
    }

これを行うには他の方法があります。最後にブロックなど。ただし、提供される情報の量が限られており、それを機能させることを目的としている場合は、上記で十分です。

于 2012-07-17T13:18:33.283 に答える
2

あなたはこれを行うことができます:

public void testCase() throws NullPointerException{
        try{
            System.out.println("Start");
            String out = null;
            out.toString();
        }catch(NullPointerException e){
            System.out.println("Exception");
        } finally {
            System.out.println("Stop");
        }
    }
于 2012-07-17T13:38:37.360 に答える
0

とげのあるスニペット、質問は:

  • 内部アドレス(ここでoutは出力)をクラッシュするとどうなります Stringか ?null
  • null String注意を集中するためのスニペットを付けて、を印刷することは可能ですか。

次の行を書き直すことができます:次の行 ("" + out).toString();に渡します。

「現状のまま」では、3行目と関係があることについて、2番目の質問をプッシュする必要がない限り、技術面接ではありません。

テストは次のとおりでした。問題のすべての部分が表示されない場合、または問題がネストされている場合に候補者が行うことは、実際の問題を理解するために助けを求めることができるかどうかです。

コメント後に編集

行にコメントしない限り、破損したコードをキャプチャする必要があります。

try {
    // Corrupted code to avoid 
    String out = null;
    out.toString();
} catch (Exception e) {
    // Careful (and professionnal) signal
    System.out.println("out.toString() : code to repair.");
} 
System.out.println("Stop"); // will appear to console
于 2012-07-17T13:39:02.840 に答える