Ném

Kiểu dữ liệu và Exceptions trong Java

Jim White

Java Developer

Các cách xử lý

  • Checked exception cần được "xử lý"
    • Xử lý runtime exception là tùy chọn
  • Hai cách "xử lý"
    • Dùng try/catch để bắt Exception và viết mã khắc phục
    • "Throw" ngoại lệ
  • Try/catch là cách ưu tiên để xử lý ngoại lệ
    • Không phải lúc nào cũng khả thi; đôi khi nên gom xử lý ngoại lệ
Kiểu dữ liệu và Exceptions trong Java

Từ khóa throws

  • Dùng throws trên bất kỳ phương thức nào để trả ngoại lệ về cho phương thức gọi
    • Thay vì xử lý trong chính phương thức
    • Gọi là "ném ngoại lệ" hay "đẩy trách nhiệm"
    • Chuyển trách nhiệm xử lý cho bên gọi
  • Dùng danh sách kiểu ngoại lệ, cách nhau bằng dấu phẩy, sau throws
    • Cho biết bên gọi có thể gặp các ngoại lệ nào
public static void someMethod() throws IndexOutOfBoundsException, 
NegativeArraySizeException, NullPointerException {
  // method code
}
Kiểu dữ liệu và Exceptions trong Java
Ví dụ throws

Try-catch thông thường để xử lý Exception

public static void main(String[] args) {
  someMethod();
}
public static void someMethod(){
  try {
    ArrayList<String> games
      = new ArrayList<String>();
    games.add("Monopoly");
    games.add("Chess");
    games.get(3);
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "Oops - trying to get non-existent item");
  }
}

Dùng throws để xử lý Exception

public static void main(String[] args) {
  try {
    someMethod();
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "someMethod tried to get non-existent item");
  }
}
public static void someMethod()
      throws IndexOutOfBoundsException {
  ArrayList<String> games
    = new ArrayList<String>();
  games.add("Monopoly");
  games.add("Chess");
  games.get(3);
}
Kiểu dữ liệu và Exceptions trong Java

Khi nào dùng throws

  • "Đẩy trách nhiệm" hay ném ngoại lệ là điều nên tránh
    • Thực hành tốt là try-catch ngay nơi phát sinh
  • Lý do ném thay vì try-catch:
    • Phương thức phát sinh ngoại lệ có thể không biết cách khôi phục
    • Tập trung xử lý để giảm lặp mã try/catch

Ném ngoại lệ thường dùng với ngoại lệ tùy chỉnh

1 Photo from https://unsplash.com/@philipparosetite
Kiểu dữ liệu và Exceptions trong Java

Bắt và ném lại

  • Có thể "ném lại" một Exception
    • Phương thức gọi cũng dùng throws thay vì try/catch
  • Ném lại từ main sẽ làm ứng dụng dừng

Có thể ném lại ngoại lệ về phương thức gọi

Kiểu dữ liệu và Exceptions trong Java

Ví dụ ném lại

public class RethrowExample {
    public static void main(String[] args) {
        try {
            method1(0);
        } catch (ArithmeticException e) {
            System.out.println("Oops - tried a bad quotient");
        }
    }
    public static void method1(int divisor) throws ArithmeticException {
        method2(divisor);
    }
    public static void method2 (int divisor) throws ArithmeticException {
        int z = 5/divisor;
        System.out.println(z);
    }
}
Kiểu dữ liệu và Exceptions trong Java

Ayo berlatih!

Kiểu dữ liệu và Exceptions trong Java

Preparing Video For Download...