ฉันต้องการทราบความแตกต่างระหว่างสิ่งต่อไปนี้ใน Java
System.exit(0);
System.exit(-1);
System.exit(1);
ฉันต้องใช้รหัสด้านบนเมื่อใด
ฉันต้องการทราบความแตกต่างระหว่างสิ่งต่อไปนี้ใน Java
System.exit(0);
System.exit(-1);
System.exit(1);
ฉันต้องใช้รหัสด้านบนเมื่อใด
คำตอบ:
พารามิเตอร์ของ exit ควรมีคุณสมบัติถ้าการทำงานของโปรแกรมดีหรือไม่ดี มันเป็นลักษณะทางพันธุกรรมจากภาษาการเขียนโปรแกรมแบบเก่าซึ่งมีประโยชน์ที่จะทราบว่ามีบางอย่างผิดปกติหรือผิดพลาด
รหัสออกคือ
0
เมื่อการดำเนินการเป็นไปด้วยดี;1
, -1
, whatever != 0
เมื่อเกิดข้อผิดพลาดบางอย่างเกิดขึ้นคุณสามารถใช้ค่าที่แตกต่างกันสำหรับชนิดที่แตกต่างกันของข้อผิดพลาดหากฉันแก้ไขรหัสทางออกที่ใช้เป็นเพียงตัวเลขบวก (ฉันหมายถึงเป็น UNIX) และตามช่วง:
1-127
เป็นรหัสที่ผู้ใช้กำหนด (สร้างโดยการโทรexit(n)
)128-255
เป็นรหัสที่สร้างขึ้นโดยการยกเลิกเนื่องจากสัญญาณยูนิกซ์ที่แตกต่างกันเช่นSIGSEGVหรือSIGTERMแต่ฉันไม่คิดว่าคุณควรใส่ใจในขณะที่เขียนโค้ดบน Java มันเป็นเพียงข้อมูลเล็กน้อย มีประโยชน์ถ้าคุณวางแผนที่จะให้โปรแกรมของคุณโต้ตอบกับเครื่องมือมาตรฐาน
java MyApp && echo success
จะพิมพ์ "สำเร็จ" iff MyApp มีรหัสการออกเป็น 0 นั่นคือถ้ามันเรียกexit(0)
หรือถึงจุดสิ้นสุดของวิธีการหลักโดยไม่มีข้อผิดพลาด
Zero
=> ทุกอย่างโอเค
Positive
=> บางสิ่งที่ฉันคาดว่าอาจผิดพลาดเกิดข้อผิดพลาด (บรรทัดคำสั่งไม่ถูกต้องไม่พบไฟล์ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์)
Negative
=> บางสิ่งที่ฉันไม่ได้คาดว่าจะเกิดความผิดพลาด (ข้อผิดพลาดของระบบ - ข้อยกเว้นที่ไม่คาดคิด - การบังคับจากภายนอกเช่นkill -9
)
(ค่าที่มากกว่า 128 เป็นค่าลบจริง ๆ ถ้าคุณคิดว่ามันเป็นเลขฐานสองที่ลงนาม 8 บิตหรือส่วนเติมเต็มสองครั้ง)
มีรหัสทางออกมาตรฐานที่ดีมากมายที่นี่
kill -15
) มักจะส่งผลให้รหัสออก128+signal
แต่ (นอกเหนือจาก 9) สามารถจัดการและ ส่งคืนรหัสทางออกอื่น -
ในkill -15
เป็นเครื่องหมายตัวเลขเป็นสัญญาณและไม่ pid ก็ไม่ได้ทำให้สัญญาณเชิงลบ
System.exit(-1)
แล้วในเปลือกecho $?
คุณจะได้รับ '255' นี่คือเหตุผลที่ฉันพูดว่าจำนวนลบเป็นข้อผิดพลาดของระบบไม่ใช่เพราะ '-' ในพารามิเตอร์ kill คุณคิดอย่างจริงจังว่าเป็นสิ่งที่ฉันคิดหรือไม่ แต่ขอบคุณที่อธิบายกลไกที่ Bash สร้างรหัสเหล่านี้
System.exit(system call)
ยุติการทำงานของเครื่องเสมือน Java ที่กำลังรันอยู่โดยเริ่มต้นลำดับการปิดเครื่อง อาร์กิวเมนต์ที่ทำหน้าที่เป็นรหัสสถานะ
โดยการประชุมรหัสสถานะที่ไม่ใช่ศูนย์บ่งชี้ว่าการเลิกจ้างที่ผิดปกติ
System.exit(0) or EXIT_SUCCESS; ---> Success
System.exit(1) or EXIT_FAILURE; ---> Exception
System.exit(-1) or EXIT_ERROR; ---> Error
อ่านเพิ่มเติมได้ที่ Java
บนระบบ Unix และ Linux 0
สำหรับการประมวลผลที่สำเร็จและ1
สูงกว่าสำหรับการประมวลผลที่ล้มเหลว
EXIT_*
ไม่มีอยู่ใน Java
exit(0)
โดยทั่วไปใช้เพื่อบ่งชี้ถึงการยกเลิกที่ประสบความสำเร็จ exit(1)
หรือexit(-1)
หรือค่าที่ไม่เป็นศูนย์อื่น ๆ บ่งชี้ถึงการเลิกจ้างที่ไม่สำเร็จโดยทั่วไป
นี่คือคำตอบ
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
gotcha ที่ดีคือรหัสข้อผิดพลาดใด ๆ > 255 จะถูกแปลงเป็นรหัสข้อผิดพลาด% 256 หนึ่งควรระมัดระวังเป็นพิเศษเกี่ยวกับเรื่องนี้ถ้าพวกเขากำลังใช้รหัสข้อผิดพลาดที่กำหนดเอง> 255 และคาดว่ารหัสข้อผิดพลาดที่แน่นอนในตรรกะของโปรแกรมประยุกต์ http://www.tldp.org/LDP/abs/html/exitcodes.html
ความแตกต่างของตัวเลขที่ใส่ใน system.exit () ถูกอธิบายในคำตอบอื่น ๆ แต่ความแตกต่างที่แท้จริงคือ System.exit () เป็นรหัสที่กลับสู่กระบวนการเรียกใช้ หากโปรแกรมกำลังถูกเรียกใช้โดยระบบปฏิบัติการแล้วโค้ดส่งคืนจะแจ้งให้ระบบปฏิบัติการทราบว่าหาก system.exit () คืนค่า 0 มากกว่าทุกอย่างก็โอเค แต่ถ้าไม่ใช่สิ่งที่ผิดพลาดอาจมีตัวจัดการบางตัวสำหรับกระบวนการหลัก
ในขณะที่คนอื่นตอบ0
ความหมายความสำเร็จเป็นอย่างอื่น
หากคุณใช้ไฟล์ค้างคาว (หน้าต่าง) System.exit(x)
จะมีผล
รหัส java (myapp):
if (error < 2){
help();
System.exit(-1);
}
else{
doSomthing();
System.exit(0);
}
}
ไฟล์ค้างคาว:
java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
System.exit (0) โดยการประชุมรหัสสถานะที่ไม่ใช่ศูนย์บ่งชี้ว่าการเลิกจ้างที่ผิดปกติ
System.exit (1) - หมายถึงการยกเลิกไม่สำเร็จเนื่องจากข้อผิดพลาดบางอย่าง
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);
}
}
ในรหัสข้างต้นเมื่อ System.exit (0); และเมื่อฉันกด 5 กรณีมันออกอย่างถูกต้อง แต่เมื่อฉันใช้ System.exit (1); และกด case 5 มันออกมาพร้อมกับ error และอีกครั้งเมื่อฉันลองกับ case 15 มันจะออกอย่างถูกต้องโดยสิ่งนี้ฉันได้รู้ว่าเมื่อเราใส่ int ภายในอาร์กิวเมนต์มันระบุว่ามันใช้ตัวละครจากตำแหน่งนั้นถ้าฉันใส่ (4) หมายถึงใช้อักขระตัวที่ 5 จากสตริงนั้นถ้า (3) หมายถึงใช้อักขระตัวที่ 4 จากสตริงที่ป้อน