Tôi muốn biết sự khác biệt giữa các điều sau trong Java
System.exit(0);
System.exit(-1);
System.exit(1);
Khi nào tôi phải sử dụng mã trên một cách thích hợp?
Tôi muốn biết sự khác biệt giữa các điều sau trong Java
System.exit(0);
System.exit(-1);
System.exit(1);
Khi nào tôi phải sử dụng mã trên một cách thích hợp?
Câu trả lời:
Tham số thoát phải đủ điều kiện nếu việc thực hiện chương trình diễn ra tốt hay xấu. Đó là một loại di truyền từ các ngôn ngữ lập trình cũ hơn, nơi hữu ích để biết nếu có sự cố và điều gì sai.
Mã thoát là
0
khi thực hiện đã ổn1
, -1
, whatever != 0
Khi một số lỗi xảy ra, bạn có thể sử dụng giá trị khác nhau cho các loại lỗi khác nhau.Nếu tôi đúng mã thoát được sử dụng chỉ là số dương (ý tôi là trong UNIX) và theo phạm vi:
1-127
là các mã do người dùng xác định (do đó được tạo bằng cách gọi exit(n)
)128-255
là các mã được tạo bởi chấm dứt do các tín hiệu unix khác nhau như SIGSEGV hoặc SIGTERMNhưng tôi không nghĩ bạn nên quan tâm trong khi mã hóa trên Java, đó chỉ là một chút thông tin. Thật hữu ích nếu bạn có kế hoạch làm cho các chương trình của bạn tương tác với các công cụ tiêu chuẩn.
java MyApp && echo success
sẽ in "thành công" iff MyApp có mã thoát là 0, tức là nếu nó gọi exit(0)
hoặc đơn giản là đến cuối phương thức chính mà không gặp lỗi.
Zero
=> Mọi thứ đều ổn
Positive
=> Một cái gì đó tôi mong đợi có thể có khả năng đã đi sai (dòng lệnh xấu, không thể tìm thấy tệp, không thể kết nối với máy chủ)
Negative
=> Một cái gì đó tôi không mong đợi đã xảy ra (lỗi hệ thống - ngoại lệ không lường trước được - chấm dứt cưỡng bức bên ngoài, ví dụ kill -9
)
(các giá trị lớn hơn 128 thực sự là âm, nếu bạn coi chúng là nhị phân có chữ ký 8 bit hoặc bổ sung twos)
Có rất nhiều mã thoát tiêu chuẩn tốt ở đây
kill -15
) thường dẫn đến mã thoát 128+signal
, nhưng (ngoài 9) có thể được xử lý và trả về một mã thoát khác Các -
trong kill -15
được đánh dấu số là một tín hiệu và không phải là một pid, nó không làm cho tín hiệu tiêu cực.
System.exit(-1)
và sau đó trong vỏ của echo $?
bạn, bạn nhận được '255'. Đây là lý do tại sao tôi nói số âm là lỗi hệ thống, không phải do '-' trong tham số kill. Bạn có nghiêm túc nghĩ rằng đó là những gì tôi nghĩ? Nhưng cảm ơn bạn đã giải thích cơ chế mà Bash xây dựng các mã này.
System.exit(system call)
chấm dứt máy ảo Java hiện đang chạy bằng cách khởi tạo chuỗi tắt máy của nó. Đối số phục vụ như một mã trạng thái .
Theo quy ước, một mã trạng thái khác không cho thấy sự chấm dứt bất thường.
System.exit(0) or EXIT_SUCCESS; ---> Success
System.exit(1) or EXIT_FAILURE; ---> Exception
System.exit(-1) or EXIT_ERROR; ---> Error
Đọc thêm tại Java
Trên các hệ thống Unix và Linux, 0
cho các lần thực hiện thành công và 1
cao hơn cho các lần thực hiện không thành công.
EXIT_*
không tồn tại trong Java.
Mã trạng thái thoát khác không, thường chỉ ra sự chấm dứt bất thường. nếu n != 0
, tùy thuộc vào lập trình viên để áp dụng một ý nghĩa cho các n khác nhau.
Từ https://docs.oracle.com/javase/7/docs/api/java/lang/System.html .
exit(0)
thường được sử dụng để chỉ ra chấm dứt thành công. exit(1)
hoặc exit(-1)
bất kỳ giá trị khác không nào khác cho thấy việc chấm dứt không thành công nói chung.
Đây là câu trả lời.
System.exit(0);// normal termination - Successful - zero
System.exit(-1);//Exit with some Error
System.exit(1);//one or any positive integer // exit with some Information message
Một mã xác thực tốt là bất kỳ mã lỗi nào> 255 sẽ được chuyển đổi thành mã lỗi% 256. Người ta phải đặc biệt cẩn thận về vấn đề này nếu họ đang sử dụng mã lỗi tùy chỉnh> 255 và mong đợi mã lỗi chính xác trong logic ứng dụng. http://www.tldp.org/LDP/abs/html/exitcodes.html
sự khác biệt của các số được đặt trong system.exit () được giải thích trong các câu trả lời khác. nhưng SỰ KHÁC BIỆT THỰC SỰ là System.exit () là một mã được trả về quy trình gọi. Nếu chương trình đang được hệ điều hành gọi thì mã trả về sẽ báo cho HĐH rằng nếu system.exit () trả về 0 thì mọi thứ đều ổn nhưng nếu không có gì sai, thì có thể có một số trình xử lý cho quy trình cha
Như những người khác trả lời 0
có nghĩa là thành công, nếu không.
Nếu bạn sử dụng tập tin bat (cửa sổ) System.exit(x)
sẽ có hiệu lực.
Mã java (myapp):
if (error < 2){
help();
System.exit(-1);
}
else{
doSomthing();
System.exit(0);
}
}
tập tin dơi:
java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
System.exit (0) theo quy ước, mã trạng thái khác không cho biết chấm dứt bất thường.
System.exit (1) -Nó có nghĩa là chấm dứt không thành công do một số lỗi
class calc{
public static void main(String args[])
{
int a, b, c;
char ch;
do{
Scanner s=new Scanner(System.in);
System.out.print("1. Addition\n");
System.out.print("2. Substraction\n");
System.out.print("3. Multiplication\n");
System.out.print("4. Division\n");
System.out.print("5. Exit\n\n");
System.out.print("Enter your choice : ");
ch=s.next().charAt(0);
switch (ch)
{
case '1' :
Addition chose1=new Addition();
chose1.add();
break;
case '2' :
Substraction chose2=new Substraction();
chose2.sub();
break;
case '3' :
Multiplication chose3= new Multiplication();
chose3.multi();
break;
case '4' :
Division chose4=new Division();
chose4.divi();
break;
case '5' :
System.exit(0);
break;
default :
System.out.print("wrong choice!!!");
break;
}
System.out.print("\n--------------------------\n");
}while(ch !=5);
}
}
Trong đoạn mã trên khi System.exit (0) của nó; và khi tôi nhấn case 5 thì nó thoát đúng nhưng khi tôi sử dụng System.exit (1); và nhấn case 5 nó thoát với lỗi và một lần nữa khi tôi thử với case 15 nó thoát đúng bằng cách này tôi đã biết rằng, khi chúng ta đặt bất kỳ int int nào trong đối số, nó chỉ định rằng, nó lấy ký tự từ vị trí đó tức là nếu tôi đặt (4) có nghĩa là lấy ký tự thứ 5 từ chuỗi đó nếu (3) thì có nghĩa là lấy ký tự thứ 4 từ chuỗi được nhập đó