Tùy biến ngoại lệ trong Java
Bài đăng này đã không được cập nhật trong 8 năm
Trước khi tìm hiểu làm sao để tùy biến một exception, mời các bạn tham khảo bài viết về exception mình đã viết trước đây Xử lý ngoại lệ trong Java
Java có ba loại ngoại lệ là Error, Checked Exception, và Unckecked Exception. Error là loại ngoại lệ đặc biệt, lập trình viên không kiểm soát được, vì vậy ta sẽ tìm hiểu cách tùy biến cho hai loại ngoại lệ còn lại.
1. Tùy biến Checked Exception
Checked exception là exception bắt buộc lập trình viên phải handle nó khi bằng cách bao max code trong cặp try-cach. Một số checked exception phổ biến như IOException
, FileNotFoundException
(chúng đều được kế thừa từ lớp java.lang.Exception
).
Tạo lớp Checked Exception của riêng mình
Ta chỉ việc tạo một lớp exption và cho nó kế thừa lớp java.lang.Exception
.
package com.viblo.exceptions;
public class NameNotFoundException extends Exception{
/**
*
*/
private static final long serialVersionUID = -3954969488995898575L;
public NameNotFoundException(String message) {
super(message);
}
}
Xửa dụng exception mới tạo ở trên
package com.viblo.examples;
import com.java.viblo.exceptions.NameNotFoundException;
public class CustomerService {
public Customer findByName(String name) throws NameNotFoundException {
if (name == null || name == "") {
throw new NameNotFoundException("Name is NULL or EMPTY!");
}
return new Customer(name);
}
public static void main(String[] args) {
CustomerService obj = new CustomerService();
try {
Customer cus = obj.findByName("");
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
}
Exception throw
com.viblo.exceptions.NameNotFoundException: Name is NULL or EMPTY!
at com.viblo.examples.CustomerService.findByName(CustomerService.java:9)
at com.viblo.examples.CustomerService.main(CustomerService.java:22)
2. Tùy biến Unchecked Exception
Unchecked exception hay còn gọi là Runtime exception. Là exception xảy ra khi chương trình đang chạy. Một số unchecked exception phổ biến như NullPointerException
, IndexOutOfBoundsException
, IllegalArgumentException
(chúng được kế thừa từ lớp java.lang.RuntimeException
).
Tạo một Unchecked exception
package com.viblo.exceptions;
public class ListTooLargeException extends RuntimeException{
/**
*
*/
private static final long serialVersionUID = -2931564504098722867L;
public ListTooLargeException(String message) {
super(message);
}
}
Xử dụng lớp exception trên
package com.viblo.examples;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.viblo.exceptions.NameNotFoundException;
public class CustomerService {
public Customer findByName(String name) throws NameNotFoundException {
if (name == null || name == "") {
throw new NameNotFoundException("Name is NULL or EMPTY!");
}
return new Customer(name);
}
public void analyze(List<String> data) {
if (data.size() > 50) {
//runtime exception
throw new ListTooLargeException("List can't exceed 50 items!");
}
//...
}
public static void main(String[] args) {
// CustomerService obj = new CustomerService();
//
// try {
//
// Customer cus = obj.findByName("");
//
// } catch (NameNotFoundException e) {
// e.printStackTrace();
// }
CustomerService obj = new CustomerService();
//create 100 size
List<String> data = new ArrayList<>(Collections.nCopies(100, "Vunv"));
obj.analyze(data);
}
}
Exception throw
Exception in thread "main" com.viblo.examples.ListTooLargeException: List can't exceed 50 items!
at com.viblo.examples.CustomerService.analyze(CustomerService.java:24)
at com.viblo.examples.CustomerService.main(CustomerService.java:47)
Trên đây là cách chúng ta tùy biến để tạo ra những exception (checked và unchecked) trong Java theo mục đích nghiệp vụ phát triển ứng dụng. Hi vọng các bạn cảm thấy relax với exception trong Java.
Tài liệu tham khảo
All rights reserved