2014-01-14 106 views
0

看來this是從您main一個return status code的一種方式。 但我想知道這個int去哪了?我在eclipse上試過,但是我沒有在控制檯上看到它。 我怎麼了status codesystem.exit()在Java中去哪裏?

public static void main(String[] args){ 
     int status = 123; 
      System.exit(status); 
    } 
+2

如果你在Linux上,試試'echo $?' –

回答

4

該值是被稱爲exit status

退出狀態或返回在計算機編程的過程的代碼是 從一個子進程(或被叫)傳遞到父 處理的少數(或調用者)完成執行特定的 過程或委託任務。

這裏有一個小的Java測試以證明它

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Arrays; 

public class Foo { 
    public static void main(String[] args) throws Exception { 
     if (args.length != 0) 
      System.exit(Integer.parseInt(args[0])); 
     ProcessBuilder builder = new ProcessBuilder(Arrays.asList("java", "Foo", "42")); 
     Process process = builder.start(); 
     System.out.println(process .waitFor());  
    } 
} 

編譯和不帶任何參數運行這個程序。它將打印

42 

此java程序啓動子進程。當該進程結束時,它將System.exit(?)中傳遞給它的值返回給它的父進程,然後打印出來。

+0

'args [0]'如何得到'42'? –

+0

@ user1988876因爲我用'ProcessBuilder'構建的'java'進程被賦予參數'42',它變成了JVM傳遞給'main'方法的'String []'中索引爲0的參數。 –

+0

是否需要三個進程的'list(java,foo,42)'的每個參數? –

3

退出代碼(狀態)返回到操作系統上的JVM終止,所以如果你是通過終端/命令行運行它,你會看到,如果程序終止異常。

5

退出代碼通常被返回到正在運行的應用程序,例如腳本或程序,我寫使用javac Test.java 接下來,我寫了一個簡單以下簡單的Java程序

class Test { 

    public static void main(String[] args) { 
     System.exit(123); 
    } 

} 

我然後編譯它bash腳本,將運行java Test,然後打印出退出這樣的代碼

#!/bin/bash 

java Test 
echo $? 

當我運行bash腳本的數字123被打印在屏幕上,如$?是運行的最後一個命令的退出代碼。

1
C:\JavaTools>javac SystemExit.java 

C:\JavaTools>java SystemExit 

C:\JavaTools>echo %ERRORLEVEL% 
123 
0

退出代碼將返回到操作系統。返回0意味着程序退出時沒有錯誤,反之亦然。

返回不同的錯誤代碼裝置不同的原因。這可以幫助操作系統(或父進程)找出程序出了什麼問題。