12/08/2018, 13:37

Tùy biến ngoại lệ trong Java

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ì ...

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.

0