Java · Processing

Exception handling in Java/Processing

Xin chào, trong bài viết này chúng ta sẽ tìm hiểu về Exception Handling trong Java (và Processing).


CATCHING EXCEPTION

Exception handling là quá trình xử lý các lỗi xảy ra trong khi chương trình được thực thi.

Trong Java, cấu trúc xử lý exception là try/catchtức là chương trình sẽ cố gắng (try) chạy một đoạn code, nếu có lỗi xảy ra từ đoạn code đó, thì bắt lỗi (catch) và chạy một đoạn code khác. Nhờ có try/catch mà chương trình sẽ không bị crash nếu có lỗi trong quá trình thực thi.

Example 1:

try {
  println(1/0);
}
catch (Exception e) {
  println("Error: " + e);
}

Kết quả:
Error: java.lang.ArithmeticException: / by zero

Trong đoạn code trên, trong phần catch chúng ta sử dụng class Exception, do đó có thể xử lý tất cả các lỗi một cách tổng quát nhất. Nếu cần xử lý cho từng trường hợp exception cụ thể, hãy xem example 2.

Example 2:

int[] array = new int[5];
try {
  for (int i = 0; i <= 5; i++)
    array[i] = i;
}
catch (ArrayIndexOutOfBoundsException e) {
  println("Hey, that’s not a valid index!");
}
catch (NullPointerException e) {
  println("I think you forgot to create the array!");
}
catch (Exception e) {
  println("Hmmm, I dunno, something weird happened!");
  e.printStackTrace()
}

Kết quả:
Hey, that’s not a valid index!

Mỗi lệnh catch khác nhau sẽ xử lý một trường hợp exception cụ thể. Khi sử dụng nhiều lệnh catch, cần nhớ rằng các exception subclass (ví dụ như subclass NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException,…) phải được sử dụng trước superclass của nó (chính là class Exception).


RAISING EXCEPTION

Ngoài các Built-in Exception của Java, chúng ta có thể tự tạo ra các Exception khác cho các mục đích như kiểm tra tính đúng đắn của dữ liệu bằng cách sử dụng stament throw.

Nếu statement throw được thực thi, thì tất cả các câu lệnh phía sau nó sẽ bị bỏ qua. Chương trình sẽ ngay lập tức chuyển đến phần xử lý cái Exception vừa xảy ra.

Example 3:

import java.util.Scanner;

class test {
	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		int n;
		System.out.println("Please input a positive number...");
		try {
			n = input.nextInt();
			if (n <= 0)
				throw new Exception("It's not a positive number.");
			System.out.println("Thanks!");
		}
		catch (Exception e) {
			System.out.println(e);
		}
	}
}

Output:
Sau khi chạy chương trình trên, nếu chúng ta nhập vào một số không dương (≤ 0) thì sẽ xuất hiện thông báo sau: java.lang.Exception: It’s not a positive number.


THROWS KEYWORD (NOT THROW)

Nếu một method trong quá trình thực thi có khả năng tạo ra một exception nhưng bản thân nó không muốn tự xử lý exception đó thì chúng ta cần phải khai báo method đó với từ khóa throws.

Khai báo này cần chỉ ra các loại exception mà method có thể gây ra (xem bảng 1), trừ khi các exception này là subclass của RuntimeException (còn gọi là Unchecked Exception).

Capture

Bảng 1 – Java’s Checked Exceptions

Example 4:

public class test {

    public static void main(String[] args) {
        try {
            throwException();
        }
        catch (Exception e) {
            System.out.println(e);
        }
        finally {
            System.out.println("------------------------");
        }
    }

    public static void throwException() throws IllegalAccessException {
        System.out.println("Throw IllegalAccessException.");
        throw new IllegalAccessException();
    }
}

Giải thích:
– vì method throwException() đã được khai báo với keyword throws nên hoặc chúng ta cần sử dụng try/catch trong hàm main() để xử lý Exception đó; hoặc bản thân hàm main() cũng phải được khai báo với keyword throws như sau:.

public static void main(String[] args) throws IllegalAccessException {}


Reference:
[1] Exception (Error) Handling. Learning processing. Daniel Shiffman.
[2] Java throws keyword.
[3] Java – The Complete Reference. Ninth edition.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s