Lớp Exception Và Checked Exceptions (Ngoại Lệ Bắt Buộc Phải Xử Lý)

Lớp Exception trong Java là lớp cơ sở cho các loại ngoại lệ mà bạn có thể xử lý trong chương trình của mình. Các lớp con của Exception có thể là checked exceptions, nghĩa là bạn bắt buộc phải xử lý chúng bằng cách sử dụng các khối try-catch hoặc khai báo chúng trong phương thức của bạn với từ khóa throws. Trong Java, Exception có thể được chia thành hai loại chính:

1. Checked Exceptions (Ngoại lệ bắt buộc phải xử lý)

2. Unchecked Exceptions (Ngoại lệ không bắt buộc phải xử lý)

Trong các phần này, chúng ta sẽ cùng tìm hiểu chi tiết về ngoại lệ Checked Exceptions (Ngoại lệ bắt buộc phải xử lý) trong Java.

Checked Exceptions (Ngoại lệ bắt buộc phải xử lý)

Checked exception (Ngoại lệ bắt buộc phải xử lý) Là những ngoại lệ mà trình biên dịch bắt buộc phải xử lý (bằng cách sử dụng từ khóa try-catch hoặc khai báo với từ khóa throws). Chúng thường liên quan đến các tương tác bên ngoài, như I/O, mạng, v.v.

Các constructor của lớp Exception

Khi làm việc với việc xử lý ngoại lệ trong Java, lớp Exception đóng vai trò quan trọng trong việc xử lý các tình huống lỗi. Để có thể tạo ra các đối tượng ngoại lệ tùy chỉnh, lớp Exception cung cấp một số constructor (hàm khởi tạo) khác nhau. Các constructor này giúp ta có thể khởi tạo các ngoại lệ với thông tin chi tiết, bao gồm thông điệp lỗi, nguyên nhân của ngoại lệ hoặc thậm chí cả một ngăn xếp lỗi. Dưới đây là tất cả các constructor của lớp Exception:

↳ Exception(): Tạo một ngoại lệ mới với thông báo chi tiết là null.

↳ Exception(String message): Tạo một ngoại lệ mới với thông báo chi tiết được chỉ định.

↳ Exception(String message, Throwable cause): Tạo một ngoại lệ mới với thông báo chi tiết được chỉ định và nguyên nhân gốc của lỗi.

↳ protected Exception(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace): Đây là một constructor được bảo vệ (protected), thường dùng cho việc mở rộng lớp Exception. Tạo một ngoại lệ mới với thông báo chi tiết, nguyên nhân gốc, và các cờ kiểm soát hành vi của ngoại lệ.

↳ Exception(Throwable cause): Tạo một ngoại lệ mới với nguyên nhân gốc được chỉ định. Thông báo chi tiết sẽ là chuỗi biểu diễn của nguyên nhân gốc (nếu không null).

Dưới đây là danh sách các lớp con checked exception kế thừa trực tiếp từ lớp Exception. Điều này có nghĩa là tất cả các lớp trong danh sách đều kế thừa trực tiếp từ lớp Exception và chia sẻ các đặc tính cơ bản của nó:

Ngoại lệ liên quan đến Java I/O

↳ IOException: Là lớp cơ sở cho tất cả các ngoại lệ liên quan đến lỗi nhập/xuất. Nó xảy ra khi có vấn đề trong việc đọc hoặc ghi dữ liệu.

↳ FileNotFoundException: Xảy ra khi một tệp mà bạn cố gắng mở không tồn tại.

↳ EOFException: Xảy ra khi bạn đọc dữ liệu từ một nguồn và gặp phải dấu hiệu kết thúc tập tin bất ngờ.

↳ CharConversionException: Xảy ra khi có lỗi trong việc chuyển đổi giữa các ký tự và byte trong quá trình đọc/ghi.

↳ InterruptedIOException: Xảy ra khi một hoạt động I/O bị gián đoạn do một luồng khác.

↳ ObjectStreamException: Là lớp cơ sở cho tất cả các ngoại lệ liên quan đến luồng đối tượng (object stream). Nó xảy ra khi có lỗi trong việc đọc hoặc ghi đối tượng.

↳ UnsupportedEncodingException: Xảy ra khi bạn cố gắng sử dụng một bộ mã hóa ký tự mà không được hỗ trợ.

Ngoại lệ liên quan đến cơ sở dữ liệu

↳ SQLException: Là lớp cơ sở cho tất cả các ngoại lệ liên quan đến lỗi trong cơ sở dữ liệu. Nó xảy ra khi có vấn đề với các thao tác cơ sở dữ liệu như truy vấn hoặc cập nhật dữ liệu.

↳ BatchUpdateException: Xảy ra khi có lỗi trong một nhóm các lệnh SQL được thực thi đồng thời. Điều này thường xảy ra khi một hoặc nhiều lệnh trong nhóm gặp vấn đề.

↳ SQLTimeoutException: Xảy ra khi một thao tác SQL bị hủy bỏ vì nó mất quá nhiều thời gian để thực thi, thường do thời gian chờ quá ngắn.

↳ SQLDataException: Xảy ra khi có vấn đề với dữ liệu trong cơ sở dữ liệu, chẳng hạn như dữ liệu không phù hợp với định dạng hoặc kiểu dữ liệu của cột.

↳ SQLIntegrityConstraintViolationException: Xảy ra khi có vi phạm các ràng buộc toàn vẹn dữ liệu trong cơ sở dữ liệu, chẳng hạn như việc cố gắng chèn một bản ghi với khóa chính đã tồn tại.

Ngoại lệ liên quan đến lập trình đa luồng

↳ InterruptedException: Xảy ra khi một luồng đang chờ đợi hoặc ngủ bị gián đoạn bởi một luồng khác. Ví dụ, nếu một luồng đang chờ trong khi thực hiện một tác vụ và bị đánh thức hoặc yêu cầu dừng bởi một luồng khác, InterruptedException sẽ được ném ra.

↳ ExecutionException: Xảy ra khi một tác vụ được thực thi trong một ExecutorService (hoặc tương tự) gặp lỗi. Đây là một ngoại lệ tổng quát thường bao gồm nguyên nhân lỗi gốc từ tác vụ đã thực thi.

↳ TimeoutException: Xảy ra khi một tác vụ hoặc chờ đợi trong một thao tác đa luồng mất quá nhiều thời gian và không hoàn thành trong khoảng thời gian đã chỉ định.

Ngoại lệ liên quan đến bảo mật

↳ GeneralSecurityException: Là lớp cơ sở cho tất cả các ngoại lệ liên quan đến lỗi bảo mật. Nó xảy ra khi có vấn đề với các hoạt động bảo mật như mã hóa, chứng thực, hoặc kiểm tra chữ ký số.

↳ GSSException: Xảy ra khi có lỗi trong quá trình bảo mật GSS (Generic Security Services). GSS là một giao diện bảo mật cho việc cung cấp bảo mật trong các giao thức mạng.

↳ CertificateException: Xảy ra khi có lỗi liên quan đến chứng chỉ số, chẳng hạn như chứng chỉ không hợp lệ hoặc không thể xác thực.

↳ KeyStoreException: Xảy ra khi có vấn đề với KeyStore, nơi lưu trữ các khóa và chứng chỉ. Ví dụ, lỗi có thể xảy ra khi thao tác với hoặc truy cập KeyStore.

↳ NoSuchAlgorithmException: Xảy ra khi yêu cầu một thuật toán bảo mật mà không được hỗ trợ hoặc không tồn tại trong hệ thống.

Ngoại lệ liên quan đến mạng

↳ UnknownHostException: Xảy ra khi không thể xác định địa chỉ IP của một máy chủ từ tên miền cung cấp. Điều này có thể do tên miền không tồn tại hoặc không thể truy cập.

↳ SocketException: Là lớp cơ sở cho tất cả các ngoại lệ liên quan đến lỗi bảo mật. Nó xảy ra khi có vấn đề với các hoạt động bảo mật như mã hóa, chứng thực, hoặc kiểm tra chữ ký số.

↳ ConnectException: Xảy ra khi không thể kết nối đến máy chủ từ một socket. Điều này có thể do máy chủ không có sẵn, cổng bị chặn, hoặc máy chủ từ chối kết nối.

↳ BindException: Xảy ra khi không thể liên kết một socket với một địa chỉ và cổng cụ thể, thường vì địa chỉ hoặc cổng đã được sử dụng bởi một ứng dụng khác.

Ngoại lệ liên quan đến phân tích và chuyển đổi dữ liệu

↳ ParseException: Xảy ra khi có lỗi trong quá trình phân tích cú pháp dữ liệu, chẳng hạn như khi dữ liệu đầu vào không đúng định dạng hoặc không thể phân tích được.

↳ DatatypeConfigurationException: Xảy ra khi có lỗi cấu hình liên quan đến loại dữ liệu trong XML hoặc các cấu hình khác, thường liên quan đến các API xử lý XML.

↳ TransformerException: Xảy ra khi có lỗi trong quá trình chuyển đổi dữ liệu từ một định dạng này sang định dạng khác, thường liên quan đến việc sử dụng XSLT (Extensible Stylesheet Language Transformations).

↳ TransformException: Xảy ra khi có lỗi trong quá trình chuyển đổi dữ liệu giữa các định dạng, có thể là một lỗi trong việc áp dụng quy tắc chuyển đổi.

↳ MarshalException: Xảy ra khi có lỗi trong quá trình chuyển đổi (marshalling) đối tượng Java thành dữ liệu XML hoặc một định dạng khác.

↳ XMLParseException: Xảy ra khi có lỗi trong quá trình phân tích (parse) dữ liệu XML, có thể là do dữ liệu XML không hợp lệ.

↳ XMLSignatureException: Xảy ra khi có lỗi trong việc xử lý chữ ký số XML, thường xảy ra khi xác thực hoặc tạo chữ ký số trong XML.

↳ XMLStreamException: Xảy ra khi có lỗi trong việc đọc hoặc ghi dữ liệu XML qua stream, như khi sử dụng các API xử lý XML stream.

↳ XpathException: Xảy ra khi có lỗi trong việc xử lý biểu thức XPath, thường xảy ra khi truy vấn XML với XPath không hợp lệ hoặc không thể thực hiện được.

Ngoại lệ liên quan đến giao diện người dùng

↳ AWTException: Là lớp cơ sở cho các ngoại lệ liên quan đến giao diện người dùng trong AWT (Abstract Window Toolkit). Nó xảy ra khi có lỗi trong quá trình làm việc với các thành phần của AWT.

↳ BadLocationException: Xảy ra khi có lỗi liên quan đến vị trí không hợp lệ trong tài liệu hoặc văn bản, chẳng hạn như khi cố gắng truy cập hoặc thao tác với vị trí không tồn tại.

↳ PrinterException: Xảy ra khi có lỗi trong quá trình in tài liệu, chẳng hạn như khi máy in không sẵn sàng hoặc có vấn đề với dữ liệu in.

↳ UnsupportedLookAndFeelException: Xảy ra khi giao diện người dùng yêu cầu một Look and Feel (giao diện) mà không được hỗ trợ hoặc không thể áp dụng được.

Ngoại lệ liên quan đến âm thanh và đa phương tiện

↳ MidiUnavailableException: Xảy ra khi không thể truy cập hoặc sử dụng thiết bị MIDI. Điều này có thể xảy ra nếu thiết bị MIDI không có sẵn hoặc không được cấu hình đúng.

↳ UnsupportedAudioFileException: Xảy ra khi cố gắng đọc hoặc xử lý một tập tin âm thanh mà định dạng của nó không được hỗ trợ. Ví dụ, nếu định dạng của tập tin âm thanh không hợp lệ hoặc không thể nhận diện được.

↳ LineUnavailableException: Xảy ra khi không thể truy cập hoặc sử dụng một dòng âm thanh (line) cụ thể. Điều này có thể xảy ra nếu dòng âm thanh không sẵn sàng hoặc bị chiếm dụng.

Ngoại lệ liên quan đến cấu hình và hệ thống

↳ ActivationException: Xảy ra khi có lỗi liên quan đến việc kích hoạt hoặc khởi tạo các dịch vụ, chẳng hạn như dịch vụ phân phối hoặc dịch vụ đối tượng trong hệ thống.

↳ NamingException: Xảy ra khi có lỗi trong việc truy cập hoặc xử lý các dịch vụ tên, chẳng hạn như khi không thể tìm thấy một đối tượng trong hệ thống tên hoặc dịch vụ liên quan.

↳ JMException: Là lớp cơ sở cho các ngoại lệ liên quan đến JMX (Java Management Extensions). Nó xảy ra khi có lỗi trong việc quản lý hoặc truy vấn các tài nguyên quản lý qua JMX.

Ngoại lệ khác

↳ SOAPException: Xảy ra khi có lỗi trong việc xử lý các thông điệp SOAP (Simple Object Access Protocol). Điều này có thể do lỗi trong việc gửi, nhận, hoặc phân tích thông điệp SOAP.

↳ ServerNotActiveException: Xảy ra khi một thao tác yêu cầu phải có một máy chủ đang hoạt động, nhưng không có máy chủ nào đang hoạt động hoặc máy chủ không thể hoạt động được.

↳ ScriptException: Xảy ra khi có lỗi trong việc thực thi các kịch bản (script) được viết bằng các ngôn ngữ kịch bản như JavaScript hoặc các ngôn ngữ khác được hỗ trợ.

Dưới đây là sơ đồ cây ngoại lệ lớp con checked exception kế thừa trực tiếp từ lớp Exception trong Java:

Throwable
├──Exception
│     ├── IOException (Java I/O)
│     ├── SQLException (Cơ sở dữ liệu)
│     ├── InterruptedException (Lập trình đa luồng)
│     │     ├── ExecutionException
│     │     └── TimeoutException
│     ├── UnknownHostException (Mạng)
│     │     ├── SocketException
│     │     ├── ConnectException
│     │     └── BindException
│     ├── ParseException (Phân tích và chuyển đổi dữ liệu)
│     │     ├── DatatypeConfigurationException
│     │     ├── TransformerException
│     │     ├── TransformException
│     │     ├── MarshalException
│     │     ├── XMLParseException
│     │     ├── XMLSignatureException
│     │     ├── XMLStreamException
│     │     └── XPathException
│     ├── AWTException (Giao diện người dùng)
│     │     ├── BadLocationException
│     │     ├── PrinterException
│     │     └── UnsupportedLookAndFeelException
│     ├── MidiUnavailableException (Âm thanh và đa phương tiện)
│     │     ├── UnsupportedAudioFileException
│     │     └── LineUnavailableException
│     ├── ActivationException (Cấu hình và hệ thống)
│     │     ├── NamingException
│     │     └── JMException
│     ├── SOAPException (Ngoại lệ khác)
│     │     ├── ServerNotActiveException
│     │     └── ScriptException

Trong các phần tiếp theo, chúng ta sẽ cùng tìm hiểu chi tiết về ngoại lệ Unchecked exception (Ngoại lệ không bắt buộc phải xử lý) trong Java.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”