Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Unreachable catch blocks ใน Java คืออะไร?

บล็อกของคำสั่งที่ control ไม่สามารถเข้าถึงได้ ในทุกกรณี เรียกว่า unreachable blocks Java ไร้ support unreachable blocks Catch block ที่ระบุด้วย reference ของ Exception class ควรและต้องเป็น catch block ตัวสุดท้ายเสมอ เพราะ Exception เป็น superclass ของ exceptions ทั้งหมด เมื่อเราใช้ multiple catch blocks ลำดับของ catch blocks ต้องเป็นจากเฉพาะเจาะจงไปสู่ทั่วไป (most specific to most general) กล่าวคือ subclasses ของ Exception ต้องมาก่อน และ superclasses ต้องมาหลัง หากวาง superclasses ก่อนและ subclasses หลัง คอมไพเลอร์จะ โยน unreachable catch block error

Syntax

try {
    // statements
} catch(Exception e) {
    System.out.println(e);
} catch(NumberFormatException nfe) {
    //unreachable block. Not supported by Java, leads to an error.
    System.out.println(nfe);
}

Catch clause ถือว่า reachable โดยคอมไพเลอร์ หากเงื่อนไขทั้งสองต่อไปนี้เป็นจริง:

  • Checked exception ที่โยนใน try block สามารถ assign ให้ parameter ของ C ได้
  • ไม่มี catch clause ก่อนหน้าที่ parameter type เท่ากับหรือเป็น supertype ของ parameter type ของ C

Catch clause ถือว่า reachable โดยคอมไพเลอร์ อาจเป็น unreachable หากเงื่อนไขทั้งสองต่อไปนี้เป็นจริง:

  • Catch clause parameter type E ไม่รวม unchecked exceptions ใดๆ
  • Exceptions ทั้งหมดที่โยนใน try block ซึ่ง type เป็น (strict) subtype ของ E ถูกจัดการโดย catch clauses ก่อนหน้าแล้ว

ตัวอย่าง

public class UnreachableBlock{
    public static void main(String[] args) {
        try {
            int i = Integer.parseInt("abc"); // This statement throws NumberFormatException
        } catch(NumberFormatException nfe) {
            System.out.println("This block handles NumberFormatException");
        } catch(Exception e) {
            System.out.println("This block handles all exception types");
        } catch (Throwable t) {
            System.out.println("Throwable is super class of Exception");
        }
    }
}

ผลลัพธ์

This block handles NumberFormatException