CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Mục lục

Trang chủBlogJava 7: Cách bắt nhiều ng...
Java

Java 7: Cách bắt nhiều ngoại lệ trong cùng một catch block

2 phút đọc30/08/2025
CyStack Author
Bao Tran

Web Developer

0 lượt xem
Reading Time: 2 minutes

Trong Java 7, catch block đã được cải tiến để xử lý nhiều exception trong một catch block duy nhất. Nếu bạn đang bắt nhiều exception và chúng có đoạn code xử lý tương tự nhau, thì việc sử dụng tính năng này sẽ giúp giảm trùng lặp code.

Bắt nhiều ngoại lệ trong Java 7

Hãy cùng tìm hiểu tính năng bắt nhiều ngoại lệ trong Java 7 qua một ví dụ.

Bắt nhiều ngoại lệ trong Java 7

Trước Java 7, chúng ta thường bắt nhiều ngoại lệ một cách tuần tự như minh họa bên dưới.

catch (IOException ex) {
     logger.error(ex);
     throw new MyException(ex.getMessage());
catch (SQLException ex) {
     logger.error(ex);
     throw new MyException(ex.getMessage());
}

Trong Java 7, chúng ta có thể bắt cả hai ngoại lệ này chỉ trong một catch block duy nhất như sau:

catch(IOException | SQLException ex){
     logger.error(ex);
     throw new MyException(ex.getMessage());
}

Nếu một catch block xử lý nhiều exception, bạn có thể tách chúng bằng ký hiệu pipe (|). Trong trường hợp này, tham số exception (ex) là final, nên bạn không thể thay đổi nó. Byte code (mã byte) được tạo ra bởi tính năng này nhỏ hơn và giúp giảm sự dư thừa của code.

Java rethrow exception

Một cải tiến khác nằm ở việc compiler (trình biên dịch) phân tích các ngoại lệ được ném lại (rethrown exceptions). Java rethrow exception cho phép bạn chỉ định các loại ngoại lệ cụ thể hơn trong throws clause của khai báo phương thức. Hãy xem một ví dụ nhỏ sau:

package com.journaldev.util;

public class Java7MultipleExceptions {

	public static void main(String[] args) {
		try{
			rethrow("abc");
		}catch(FirstException | SecondException | ThirdException e){
			//below assignment will throw compile time exception since e is final
			//e = new Exception();
			System.out.println(e.getMessage());
		}
	}

	static void rethrow(String s) throws FirstException, SecondException,
			ThirdException {
		try {
			if (s.equals("First"))
				throw new FirstException("First");
			else if (s.equals("Second"))
				throw new SecondException("Second");
			else
				throw new ThirdException("Third");
		} catch (Exception e) {
			//below assignment disables the improved rethrow exception type checking feature of Java 7
			// e=new ThirdException();
			throw e;
		}
	}

	static class FirstException extends Exception {

		public FirstException(String msg) {
			super(msg);
		}
	}

	static class SecondException extends Exception {

		public SecondException(String msg) {
			super(msg);
		}
	}

	static class ThirdException extends Exception {

		public ThirdException(String msg) {
			super(msg);
		}
	}

}

Như bạn thấy, trong phương thức rethrow, catch block đang bắt Exception nhưng nó không xuất hiện trong throws clause. Java 7 compiler sẽ phân tích toàn bộ try block để kiểm tra những loại ngoại lệ nào được ném và sau đó bị ném lại từ catch block.

Lưu ý rằng quá trình phân tích này sẽ bị vô hiệu nếu bạn thay đổi đối số của catch block.

Về tác giả

Bao Tran
Bao TranWeb Developer

I’m passionate about web development and sharing my insights through articles, with over 8 years of experience. I hope these sharings inspire you and help build a strong web development community. @#@ Tôi đam mê phát triển web và chia sẻ những hiểu biết của mình thông qua các bài viết, với hơn 8 năm kinh nghiệm. Tôi hy vọng những chia sẻ này sẽ truyền cảm hứng cho các bạn và giúp xây dựng một cộng đồng phát triển web mạnh mẽ.

Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn

Thảo luận (0)

Đăng nhập để thảo luận

Bài viết liên quan