Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Unreachable catch blocks là gì trong Java?


Một khối câu lệnh mà luồng điều khiển không bao giờ đến được dưới bất kỳ trường hợp nào được gọi là unreachable blocks. Unreachable blocks không được Java hỗ trợ. Khối catch được khai báo với tham chiếu của lớp Exception phải luôn là khối catch cuối cùng vì Exception là lớp cha của tất cả các ngoại lệ. Khi chúng ta giữ nhiều catch blocks, thứ tự các catch blocks phải từ cụ thể nhất đến tổng quát nhất. Tức là các subclass của Exception phải đặt trước và superclass sau. Nếu đặt superclass trước và subclass sau, trình biên dịch sẽ ném lỗi unreachable catch block.

Cú pháp

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); 
}

Một catch clause được coi là reachable bởi trình biên dịch nếu cả hai điều kiện sau đúng

  • Một checked exception được ném trong try block có thể gán cho tham số của C.
  • Không có catch clause trước đó có kiểu tham số bằng hoặc là supertype của kiểu tham số của C

Một catch clause được coi là reachable bởi trình biên dịch có thể unreachable nếu cả hai điều kiện sau đúng

  • Kiểu tham số của catch clause E không bao gồm bất kỳ unchecked exceptions nào.
  • Tất cả ngoại lệ được ném trong try block có kiểu là (strict) subtype của E đã được xử lý bởi các catch clauses trước đó.

Ví dụ

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"); 
        } 
    } 
}

Kết quả

This block handles NumberFormatException