การจัดการข้อยกเว้นใน Java

ข้อยกเว้นในคืออะไร Java?

ข้อยกเว้นใน Java เป็นเหตุการณ์ที่ขัดขวางการดำเนินการคำสั่งของโปรแกรม และรบกวนขั้นตอนปกติของการเรียกใช้โปรแกรม เป็นอ็อบเจ็กต์ที่ล้อมรอบข้อมูลเหตุการณ์ข้อผิดพลาดที่เกิดขึ้นภายในวิธีการและถูกส่งไปยังระบบรันไทม์ ใน Javaข้อยกเว้นส่วนใหญ่จะใช้เพื่อระบุเงื่อนไขข้อผิดพลาดประเภทต่างๆ

ข้อผิดพลาดมีสองประเภท:

  1. ข้อผิดพลาดในการคอมไพล์เวลา
  2. ข้อผิดพลาดรันไทม์

ข้อผิดพลาดในการคอมไพล์เวลาสามารถจำแนกได้อีกครั้งเป็นสองประเภท:

  • ข้อผิดพลาดทางไวยากรณ์
  • ข้อผิดพลาดทางความหมาย

ตัวอย่างข้อผิดพลาดทางไวยากรณ์:

แทนที่จะประกาศ. int a; คุณประกาศผิดว่าเป็น in a; คอมไพเลอร์ตัวไหนที่จะส่งข้อผิดพลาด

ตัวอย่าง: คุณได้ประกาศตัวแปร int a; และหลังจากโค้ดบางบรรทัด คุณจะประกาศจำนวนเต็มอีกครั้งเป็น int a;ข้อผิดพลาดทั้งหมดเหล่านี้จะถูกเน้นไว้เมื่อคุณคอมไพล์โค้ด

ตัวอย่างข้อผิดพลาดรันไทม์

ข้อผิดพลาดรันไทม์เรียกว่า ข้อยกเว้น ข้อผิดพลาด คือเหตุการณ์ใดๆ ก็ตามที่ขัดจังหวะการทำงานปกติของโปรแกรม ตัวอย่างของข้อยกเว้น ได้แก่ ข้อยกเว้นเลขคณิต ข้อยกเว้น Nullpointer ข้อยกเว้นการหารด้วยศูนย์ เป็นต้น ข้อยกเว้นใน Java เป็นสิ่งที่อยู่นอกเหนือการควบคุมของนักพัฒนา

คลิก Good Farm Animal Welfare Awards หากไม่สามารถเข้าถึงวิดีโอได้

ทำไมเราถึงต้องการข้อยกเว้น?

สมมติว่าคุณได้เขียนโค้ดโปรแกรมเพื่อเข้าถึงเซิร์ฟเวอร์ สิ่งต่าง ๆ ทำงานได้ดีในขณะที่คุณกำลังพัฒนาโค้ด

Java การจัดการข้อยกเว้น

ในระหว่างการดำเนินการผลิตจริง เซิร์ฟเวอร์หยุดทำงาน เมื่อโปรแกรมของคุณพยายามเข้าถึง จะมีข้อยกเว้นเกิดขึ้น

Java การจัดการข้อยกเว้น

วิธีจัดการกับข้อยกเว้น

จนถึงตอนนี้เราได้เห็นแล้วว่าข้อยกเว้นอยู่นอกเหนือการควบคุมของนักพัฒนา แต่การกล่าวโทษความล้มเหลวของโค้ดเกี่ยวกับปัญหาด้านสิ่งแวดล้อมไม่ใช่วิธีแก้ปัญหา คุณต้องมีการเขียนโปรแกรมที่แข็งแกร่งซึ่งจะดูแลสถานการณ์พิเศษ รหัสดังกล่าวเรียกว่า ตัวจัดการข้อยกเว้น

ในตัวอย่างของเรา การจัดการข้อยกเว้นที่ดีคือ เมื่อเซิร์ฟเวอร์ล่ม ให้เชื่อมต่อกับเซิร์ฟเวอร์สำรอง

Java การจัดการข้อยกเว้น

ในการใช้งาน ให้ป้อนโค้ดของคุณเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ (โดยใช้เงื่อนไข if และ else แบบดั้งเดิม) คุณจะตรวจสอบว่าเซิร์ฟเวอร์หยุดทำงานหรือไม่ หากหยุดทำงาน ให้เขียนโค้ดเพื่อเชื่อมต่อกับเซิร์ฟเวอร์สำรอง การจัดระเบียบโค้ดดังกล่าวโดยใช้ลูป "if" และ "else" จะไม่มีผลเมื่อโค้ดของคุณมีหลายเงื่อนไข ข้อยกเว้นของจาวา เพื่อจัดการ

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

ลองจับบล็อก

Java ให้การควบคุมที่ยอดเยี่ยมในตัว

  1. รหัสปกติจะเข้าสู่ a TRY กลุ่ม
  2. รหัสการจัดการข้อยกเว้นจะอยู่ในไฟล์ จับ ปิดกั้น

ลองจับบล็อก

ในตัวอย่างของเรา บล็อก TRY จะประกอบด้วยโค้ดสำหรับเชื่อมต่อกับเซิร์ฟเวอร์ บล็อก CATCH จะประกอบด้วยโค้ดสำหรับเชื่อมต่อกับเซิร์ฟเวอร์สำรอง หากเซิร์ฟเวอร์ทำงานอยู่ โค้ดในบล็อก CATCH จะถูกละเว้น หากเซิร์ฟเวอร์หยุดทำงาน ข้อยกเว้นจะเกิดขึ้น และโค้ดในบล็อก Catch จะถูกดำเนินการ

ลองจับบล็อก

ดังนั้นนี่คือวิธีการจัดการข้อยกเว้น Java.

ไวยากรณ์การใช้ try & catch

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

ตัวอย่าง

ขั้นตอน 1) คัดลอกโค้ดต่อไปนี้ลงในโปรแกรมแก้ไข

class JavaException {
   public static void main(String args[]){
      int d = 0;
      int n = 20;
      int fraction = n/d;
     System.out.println("End Of Main");
   }
}

ขั้นตอน 2) บันทึกไฟล์และคอมไพล์โค้ด เรียกใช้โปรแกรมโดยใช้คำสั่ง java Javaข้อยกเว้น

ขั้นตอน 3) ข้อยกเว้นทางคณิตศาสตร์ - หารด้วยศูนย์จะแสดงไว้ด้านล่างสำหรับบรรทัด # 5 และบรรทัด # 6 จะไม่ถูกดำเนินการ

ขั้นตอน 4) ตอนนี้เรามาดูกันว่าการ try and catch จะช่วยให้เราจัดการกับข้อยกเว้นนี้ได้อย่างไร เราจะใส่ข้อยกเว้นที่ทำให้เกิดบรรทัดของโค้ดลงใน ลอง บล็อกตามด้วย จับ บล็อก คัดลอกโค้ดต่อไปนี้ลงในตัวแก้ไข

class JavaException {
 public static void main(String args[]) {
  int d = 0;
  int n = 20;
  try {
   int fraction = n / d;
   System.out.println("This line will not be Executed");
  } catch (ArithmeticException e) {
   System.out.println("In the catch Block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

ขั้นตอน 5) บันทึก คอมไพล์ และรันโค้ด คุณจะได้ผลลัพธ์ดังต่อไปนี้

ลองจับบล็อก

ในขณะที่คุณสังเกต ข้อยกเว้นจะถูกจัดการ และโค้ดบรรทัดสุดท้ายก็ถูกดำเนินการเช่นกัน นอกจากนี้ โปรดทราบว่าบรรทัด #7 จะไม่ถูกดำเนินการเนื่องจาก ทันทีที่มีข้อยกเว้นเกิดขึ้น การไหลของการควบคุมจะข้ามไปยังบล็อก catch

หมายเหตุ AritmeticException Object “e” มีข้อมูลเกี่ยวกับข้อยกเว้นที่เกิดขึ้นซึ่งอาจเป็นประโยชน์ในการดำเนินการกู้คืน

Java ลำดับชั้นข้อยกเว้น

หลังจากดำเนินการคำสั่ง catch หนึ่งคำสั่งแล้ว คำสั่งอื่น ๆ จะถูกข้าม และการดำเนินการจะดำเนินต่อไปหลังจากบล็อก try/catch บล็อก catch ที่ซ้อนกันเป็นไปตามลำดับชั้นของข้อยกเว้น


Java ลำดับชั้นข้อยกเว้น

  • คลาสข้อยกเว้นทั้งหมดใน Java ขยายคลาส 'Throwable' Throwable มีสองคลาสย่อยคือ Error และ Exception
  • คลาส Error กำหนดข้อยกเว้นหรือปัญหาที่โปรแกรมของเราไม่คาดว่าจะเกิดขึ้นภายใต้สถานการณ์ปกติ เช่น ข้อผิดพลาดของหน่วยความจำ ข้อผิดพลาดของฮาร์ดแวร์ ข้อผิดพลาด JVM เป็นต้น
  • คลาส Exception แสดงถึงข้อยกเว้นที่โปรแกรมของเราสามารถจัดการได้ และโปรแกรมของเราสามารถกู้คืนได้จากข้อยกเว้นนี้โดยใช้ try and catch block
  • ข้อยกเว้นรันไทม์เป็นคลาสย่อยของคลาสข้อยกเว้น ข้อยกเว้นประเภทนี้แสดงถึงข้อยกเว้นที่เกิดขึ้นในขณะรันไทม์และไม่สามารถติดตามได้ในขณะคอมไพล์ ตัวอย่างที่ดีเยี่ยมของข้อยกเว้นแบบเดียวกันคือข้อยกเว้นการหารด้วยศูนย์ หรือข้อยกเว้นตัวชี้ค่าว่าง เป็นต้น
  • ข้อยกเว้น IO ถูกสร้างขึ้นระหว่างการดำเนินการอินพุตและเอาต์พุต
  • ข้อยกเว้นที่ถูกขัดจังหวะใน Javaถูกสร้างขึ้นระหว่างการเธรดหลาย ๆ ครั้ง

ตัวอย่าง: เพื่อทำความเข้าใจการซ้อนกันของบล็อก try and catch

ขั้นตอน 1) คัดลอกโค้ดต่อไปนี้ลงในโปรแกรมแก้ไข

class JavaException {
 public static void main(String args[]) {
  try {
   int d = 1;
   int n = 20;
   int fraction = n / d;
   int g[] = {
    1
   };
   g[20] = 100;
  }
  /*catch(Exception e){
  	System.out.println("In the catch block due to Exception = "+e);
  }*/
  catch (ArithmeticException e) {
   System.out.println("In the catch block due to Exception = " + e);
  } catch (ArrayIndexOutOfBoundsException e) {
   System.out.println("In the catch block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

ขั้นตอน 2) บันทึกไฟล์และคอมไพล์โค้ด รันโปรแกรมโดยใช้คำสั่ง ชวา Javaข้อยกเว้น.

ขั้นตอน 3) ArrayIndexOutOfBoundsException ถูกสร้างขึ้น เปลี่ยนค่าของ int d เป็น 0 บันทึก คอมไพล์ และรันโค้ด

ขั้นตอนที่ 4) ต้องสร้าง ArithmeticException

ขั้นตอน 5) ไม่ใส่เครื่องหมายข้อคิดเห็นบรรทัด #10 ถึงบรรทัด #12 บันทึก คอมไพล์ และรันโค้ด

ขั้นตอน 6) ข้อผิดพลาดในการรวบรวม? เนื่องจากข้อยกเว้นเป็นคลาสพื้นฐานของ ArithmeticException Exception ข้อยกเว้นใด ๆ ที่เกิดขึ้นโดย ArithmeticException สามารถจัดการได้โดยคลาส Exception เช่นกัน ดังนั้น catch block ของ ArithmeticException จะไม่มีโอกาสถูกดำเนินการซึ่งทำให้ซ้ำซ้อน จึงเกิดข้อผิดพลาดในการคอมไพล์

Java ในที่สุดก็บล็อค

บล็อกสุดท้ายก็คือ ดำเนินการโดยไม่คำนึงถึงข้อยกเว้นที่เกิดขึ้น ในบล็อกลอง มันคือ ไม่จำเป็น เพื่อใช้กับบล็อกลอง

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

ในกรณีที่มีข้อยกเว้นเกิดขึ้นในบล็อก try บล็อกจะถูกดำเนินการในที่สุดหลังจากที่ catch block ถูกดำเนินการ

ตัวอย่าง

ขั้นตอน 1) คัดลอกโค้ดต่อไปนี้ลงในโปรแกรมแก้ไข

class JavaException {
   public static void main(String args[]){
    try{
       int d = 0;
       int n =20;
       int fraction = n/d;
    }
  catch(ArithmeticException e){
    System.out.println("In the catch block due to Exception = "+e);
  }
  finally{
	System.out.println("Inside the finally block");
  }
}
}

ขั้นตอน 2) บันทึก คอมไพล์ และรันโค้ด

ขั้นตอน 3) ผลผลิตที่คาดหวัง ในที่สุดบล็อกก็ถูกดำเนินการแม้ว่าจะมีข้อยกเว้นเกิดขึ้นก็ตาม

ขั้นตอน 4) เปลี่ยนค่าของตัวแปร d = 1 บันทึก คอมไพล์ และรันโค้ดแล้วสังเกตผลลัพธ์ ด้านล่างของฟอร์ม

สรุป

  • An ข้อยกเว้นคือข้อผิดพลาดรันไทม์ ซึ่งขัดขวางโฟลว์ปกติของการทำงานของโปรแกรม การหยุดชะงักระหว่างการทำงานของโปรแกรมเรียกว่าข้อผิดพลาดหรือข้อยกเว้น
  • ข้อผิดพลาดแบ่งออกเป็นสองประเภท
    • ข้อผิดพลาดเวลาคอมไพล์ - ข้อผิดพลาดทางไวยากรณ์ ข้อผิดพลาดทางความหมาย
    • ข้อผิดพลาดระหว่างการทำงาน-ข้อยกเว้น
  • A โปรแกรมที่แข็งแกร่งควรจัดการข้อยกเว้นทั้งหมด และดำเนินการโปรแกรมตามปกติต่อไป Java มอบวิธีการจัดการที่ยอดเยี่ยมในตัว
  • Exception Handler คือชุดของโค้ดที่ จัดการข้อยกเว้น- สามารถจัดการข้อยกเว้นได้ Java ใช้ try & catch
  • ลองบล็อคดูครับ: รหัสปกติจะอยู่ในบล็อกนี้
  • จับบล็อก: หากมีข้อผิดพลาดในโค้ดปกติก็จะเข้าไปอยู่ในบล็อกนี้