コマンドライン引数のエラーチェックを行いたい
public static void main(String[] args)
{
if(args[0] == null)
{
System.out.println("Proper Usage is: java program filename");
System.exit(0);
}
}
ただし、これは範囲外の配列の例外を返すため、理にかなっています。適切な使用法を探しています。
回答:
@jjnguyの答えはほとんどの状況で正しいです。アプリケーションを通常の方法でコマンドラインから実行することによって呼び出された場合null
、引数の配列(またはnull
配列)に文字列は表示されませんmain
。
ただし、アプリケーションの他の部分がmain
メソッドを呼び出す場合、null
引数またはnull
引数配列を渡す可能性があります。
ただし、(2)、これは明らかに非常に異常なユースケースであり、main
エントリポイントメソッドの暗黙の契約に対する重大な違反です。したがって、でnull
引数の値をチェックする必要はないと思いますmain
。それらが発生するというまれなイベントでは、呼び出しコードがを取得することは許容されNullPointerException
ます。結局のところ、契約に違反するのは発信者のバグです。
この点をさらに詳しく説明します。
args変数自体がnullになる可能性がありますが、通常の実行ではできません。通常の実行ではjava.exe
、コマンドラインからのエントリポイントとして使用されます。ただし、C++
JNIでコンパイルされたコードを使用してを使用jvm.dll
し、java.exeを完全にバイパスするプログラムをいくつか見ました。この場合、NULL
mainメソッドに渡すことができます。その場合、argsはnullになります。
常にif ((args == null) || (args.length == 0))
、またはif ((args != null) && (args.length > 0))
必要に応じて確認することをお勧めします。
引数を渡さない場合、その場合でもargsは初期化されますが、アイテム/要素はありません。次のいずれかを試してください、同じ効果が得られます:
public static void main(String[] args) throws InterruptedException {
String [] dummy= new String [] {};
if(dummy[0] == null)
{
System.out.println("Proper Usage is: java program filename");
System.exit(0);
}
}
main
メソッドはargs
長さがゼロの配列で呼び出されます。
dummy[0]
、配列のインデックスが範囲外の例外をスローすることです!! プログラムを(戻る)テストに変更し、args[0]
引数なしで実行した場合も同様です。
null
チェックは不要ですが、あなたはそれを正しいとlength
、チェックが必要である