2011-07-21 8 views
17

Có một lớp Java tạo ra một yêu cầu POST và gửi nó tới một servlet. Phương pháp chính của tập tin lớp học (thử nghiệm) trông giống như sau:Giá trị trả về từ mã Java

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

này được gọi là từ một cái gì đó KornShell (ksh) kịch bản như thế này:

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

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

retcode luôn có giá trị " 2 "độc lập nếu mã không thành công hoặc thành công. Câu hỏi của tôi là vì kiểu trả về của phương thức chính của tôi là "void" tại sao mã trả về một số giá trị?

Trả lời

17

Chương trình Java không trả lại mã thoát cho hệ điều hành bằng cách trả lại giá trị từ main, như được thực hiện trong C và C++. Bạn có thể thoát khỏi chương trình và xác định mã lối ra bằng cách gọi System.exit(code);, ví dụ:

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

này trả về mã lỗi 0 (tất cả mọi thứ diễn ra tốt đẹp). System.exit Doc

4

Sử dụng

System.exit(someNumber); 

này sẽ cung cấp cho kiểm soát ứng dụng của bạn trên giá trị trả về nhìn thấy bởi hệ điều hành.

34

Giá trị trả về của một ứng dụng Java là không giá trị trả về của nó main phương pháp, bởi vì một ứng dụng Java không nhất thiết phải kết thúc khi nó main phương pháp đã hoàn thành thi công.

Thay vào đó, JVM kết thúc khi không có chuỗi không phải daemon nào đang chạy hoặc khi được gọi là System.exit().

System.exit() cũng là cách duy nhất để chỉ định giá trị trả về: đối số được chuyển đến System.exit() sẽ được sử dụng làm giá trị trả lại của quá trình JVM trên hầu hết hệ điều hành.

Vì vậy, kết thúc phương pháp main() của bạn với điều này:

System.exit(0); 

sẽ đảm bảo hai điều:

  • rằng ứng dụng Java của bạn thực sự thoát ra khi kết thúc main đạt và
  • rằng sự trở lại giá trị của quá trình JVM là 0
+1

Đây phải là câu trả lời được chấp nhận vì nó có giải thích tốt hơn về các hoạt động bên trong. – searchengine27

2

Chương trình của bạn luôn luôn trả lại mã trả lại sau khi thoát. Trong các chương trình bình thường, nếu bạn không chỉ định mã trả về, nó sẽ trả về số không (điều này bao gồm việc đặt kiểu trả về là void).

Java, tuy nhiên, thích đặc biệt! Java sẽ không trả về mã trả về bạn trả về ở phương thức Main, nhưng nó sẽ trả về một số mã trả về khi JVM thoát (tài khoản này cho các chương trình đa luồng), và sẽ trả về một cuộc gọi chỉ định một cuộc gọi System.Exit(returnCode);.

1

Bạn không nhận được trạng thái thoát, đó là những gì $? chứa. Bạn đang chuẩn hóa, mọi thứ được viết thành System.out.