2011-07-21 57 views
17

有一個Java類創建一個POST請求並將它發送給一個servlet。 類文件(測試)的主要方法看起來是這樣的:Java代碼的返回值

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

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

retcode的值總是「:

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

這是從一個KornShell(KSH)腳本是這樣的所謂2「獨立於代碼是否失敗或成功。 我的問題是因爲我的主要方法的返回類型是「無效」,爲什麼代碼返回一些值?

回答

17

正如在C和C++中所做的那樣,Java程序不會通過從main返回值返回操作系統的退出代碼。你可以通過調用System.exit(code);,比如退出程序,並指定退出代碼:

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

使用

System.exit(someNumber); 

這會給在由OS看到的返回值您的應用程序的控制。

34

Java應用程序的返回值是它的返回值是main方法,因爲Java應用程序不一定結束時,它的main方法執行完畢。

取而代之,當不再有非守護進程線程正在運行或調用System.exit()時,JVM結束。

System.exit()也是指定返回值的唯一方法:傳遞給System.exit()的參數將用作大多數OS上的JVM進程的返回值。

所以結束你main()方法與此:

System.exit(0); 

將確保兩兩件事:

  • 達到的main結束的時候,你的Java應用程序真正退出和
  • ,返回JVM進程的值爲0
+1

這應該是公認的答案,因爲它對內部工作有更好的解釋。 – searchengine27

2

您的程序總是退出後返回返回碼。在普通程序中,如果您未指定返回碼,它將返回(這包括將返回類型設置爲void)。

然而,Java很喜歡特別! Java不會返回您在Main方法返回的返回碼,但是當JVM退出時(這會佔用多線程程序)它將返回一些返回碼,並返回調用指定的內容。

1

你沒有得到退出狀態,這就是$?包含的狀態。無論是寫給System.out,你都會達到標準。