2011-07-21 15 views
17

POST要求を作成してサーブレットに送信するJavaクラスがあります。Javaコードからの戻り値

retcode=`$CLK_JAVA_PATH -cp $CLASSPATH test ${PASSWORD} ${HOSTNAME} ${TOOLSET}` 

if [ $? != "0" ];then 
     echo "ERROR: 
     echo "${retcode}" 
else 
     echo "${SCRIPT} Success" 
fi 

retcode常に "の値を持っています。これは、このような何かが、Kornシェル(kshの)スクリプトから呼び出され

public static void main(String[] args) throws IOException { 
    // Code logic goes here... 
    // No return Statement 
} 

: クラスファイル(テスト)の主な方法は、次のようになりますコードが失敗した場合や成功した場合とは無関係に2を返します。 私の主なメソッドの戻り値の型は "void"なので、なぜコードは何らかの値を返すのですか?

答えて

17

Javaプログラムは、CおよびC++で行われているように、mainから値を戻すことによって、終了コードをオペレーティングシステムに戻しません。 (すべてがうまくいった)これは、エラーコード0を返す

// Returns exit code 2 to the operating system 
System.exit(2); 
4
System.exit(0); 

を:あなたは、プログラムを終了し、例えば、System.exit(code);を呼び出すことによって終了コードを指定することができます。 System.exit Doc

4

使用

System.exit(someNumber); 

これはOSから見た戻り値を超えるアプリの制御を行います。それはmainメソッドが実行を完了したのです時に、Javaアプリケーションは必ずしも終了していないため、Javaアプリケーションの

34

戻り値は、それのない戻り値はmain方法ですです。

代わりに、デーモン以外のスレッドが実行されていないとき、またはSystem.exit()が呼び出されたときにJVMが終了します。

System.exit()も戻り値を指定する唯一の方法です。System.exit()に渡された引数は、ほとんどのOSでJVMプロセスの戻り値として使用されます。

System.exit(0); 

二つのことを保証します:

  • mainの端が復帰することを達したと
  • されたときに、Javaアプリケーションが実際に終了しているので、これを使用してmain()方法は終了

    JVMプロセスの値は0です。

+1

これは内側の動作についてのより良い説明があるので、これは受け入れられた答えです。 – searchengine27

2

プログラム常には終了後に戻りコードを返します。通常のプログラムでは、リターンコードを指定しない場合は、ゼロ(返品タイプをvoidに設定します)が返されます。

しかし、Javaは特別なことが好きです。 JavaはMainメソッドで返されたリターンコードを返しませんが、JVMが終了すると(マルチスレッドプログラムのための)リターンコードを返し、System.Exit(returnCode);呼び出しが指定したものを返します。

1

あなたは終了ステータスを取得していません。これは$?に含まれています。 System.outに書かれているものはどれも標準化されています。