2017-07-18 22 views
-2

背景

私はJavaのチョップを磨いて、Oracle Java 8試験を受験する準備をしています。これはどの例外を投げるべきですか?

public static void main(String[] args) { 
    try { 
     String val1 = args[0]; 
     String val2 = args[1]; 
     ... 
    } catch (Exception e) { // <-- Here is where it gets tricky 
     ... 
    } 
} 

私は悪いデータを渡すとき、私は2を取得しています、それはExceptionをキャッチするために悪いフォームの実現、しかし:私は、2つの値が引数として渡されますが想定している。このような基本的なものを、持っています私が汎用オブジェクトExceptionを使って何をするかによって異なる特定の例外が発生するので、ここでどのオブジェクトを捕捉する必要があるのか​​分かりません。

セットアップ

私はこれを行う場合:

} catch (Exception e) { 
    System.err.println(e.toString()); 
} 

を私はargs与えられた意味をなすjava.lang.ArrayIndexOutOfBoundsExceptionは、配列で取得します。

私が代わりにこれを行う場合は、:

} catch (Exception e) { 
    System.err.println(e.getCause().getMessage()); 
} 

を私もしませんがないargsのStringオブジェクトへの参照があると考えると、理にかなってjava.lang.NullPointerException を取得もう意味をなさないのですが、 でなければなりません。例外がここにスローされなければならない

質問

+0

十分な引数を渡さない可能性があるので、ArrayIndexOutOfBoundsExceptionがスローされる可能性があります。 – ZeldaZach

+0

e.getCause()がnullであるため、おそらく新しいNullPointerExceptionが発生します。 – khelwood

+0

@Chris no、 'Integer.parseInt()'の部分を忘れてしまいました。ただし、プログラムに引数を与えない場合は例外です。私が本当に求めていることを示すためにそれを編集します。 –

答えて

1

ステップバイステップで、以下およびデバッグのような方法を改正してみてください -

public static void main(String[] args) { 
    try { 
     String val1 = args[0]; 
     String val2 = args[1]; 
    } catch (Exception e) { // <-- Here is where it gets tricky 
     System.err.println(e.toString()); 
     Throwable thr = e.getCause(); 
     String msg = thr.getMessage(); 
     System.err.println(msg); 
    } 
} 

try節からスロー唯一の例外はArrayIndexOutOfBoundsExceptionがあります。

catch節で、e.getCause()は、ArrayIndexOutOfBoundsExceptionの基礎となる他の因果関係の例外がないため、nullを返します。

したがって、null原因でgetMessage()をコールしようとすると、NullPointerExceptionが発生します。

関連する問題