2017-03-26 15 views
-1
public static void main(String[] args) throws IllegalArgumentException { 
    if (args[0].matches(".*\\w.*")) { 
    throw new IllegalArgumentException("Can't input characters!"); 
    } 
    String input = insertSpaces(args[0]); 
    args = input.split("\\s+"); 
    printAnswer(calculate(args),args); 
} 

上記のコードでは、メインメソッドはIllegalArgumentExceptionをスローします。 mainメソッドからスローされた例外を捕捉するにはどうすればよいですか?私が尋ねる理由、私が間違っていたら私を修正してください、私の理解は、メソッドが例外をスローすると、メソッドの呼び出し側が例外をキャッチする責任があるからです。この場合のmainメソッドはそれを呼び出す他のメソッドがないので、例外を捕捉する方法を理解できません。私は、JVMがこのメソッドを呼び出すために裏で働いていると推測していますが、JVMをどのように実行させるのでしょうか。可能であれば、説明と一緒にCODEを提供してください。それ以外の理由を説明してください。javaのmainメソッドによってスローされた例外をどのように捕捉しますか?

+3

メインメソッドから例外をスローしません。メインから処理するか、単にプログラムを終了します。 –

+3

'main'が例外をスローすると、JVMはデフォルトでそれをキャッチし、スタックトレースを出力してシャットダウンします。 –

+0

私は理解するかどうか見てみましょう。無効な入力は最終的に私のプログラムをシャットダウンするので、私のmainメソッドから例外をスローすることは、手動でそれをキャッチする方法がないので、それを早く終了させる方法です。 –

答えて

0

ベストプラクティスは、mainメソッドコールでそれらを避けて、それを処理し、何が起こったかについてユーザに有意義なメッセージを表示し、継続または終了を決定します。 Joe Cが言及したように、JVMが処理してユーザーまたは呼び出し元にスタックトレースが表示されるようにすることができます。あなたがそのような決定を下すとき(メインのスローを使って)、例外について何もすることができない瞬間です。あなたはargとして必要なファイル名を受け取るが、ファイルはそこにはない。おそらく外部リソースへのロギングを実行しない場合は、JVMがスタックトレースをプリントするようにします

0

mainメソッドから例外をスローしないでください。

mainメソッドを例外からクラッシュさせてはいけません。

IllegalArgumentExceptionは、実行時の例外と同様に、プログラマーが台無しになった結果です。あなたが台無しにしたものを修正してください。

キャッチしないでください。

+0

この場合、私は同意しないといけません。あなたは、IllegalArgumentExceptionはプログラマの結果だと言います。この場合、プログラマではなくユーザがプログラムの値を入力しています。プログラマーの仕事は、プログラムが突然終了するのではなく、ユーザーがうんざりしても、プログラムを適切に利用する方法をユーザーに案内することによって、プログラムが確実に働くようにすることです。したがってプログラマはプログラムを適応可能かつ柔軟にする。 –

+0

この場合、OPはプログラマーの混乱を表現しないため、例外を不適切に使用しています。どのようにして、 'main'から実行時例外を投げているのですか?ユーザがプログラムが突然終了するのではなく壊れても、プログラムを適切に利用する方法をユーザに案内しますか? –