Ngoại lệ vs Lỗi
Hành vi bất ngờ chắc chắn sẽ xảy ra khi một chương trình đang chạy. Điều này có thể là do ngoại lệ hoặc lỗi. Ngoại lệ là các sự kiện, có thể làm phiền luồng chương trình bình thường. Lỗi là điều kiện có thể được coi là không thể phục hồi. Các ngoại lệ chủ yếu liên quan đến chính ứng dụng, trong khi lỗi liên quan đến hệ thống mà chương trình đang chạy.
Ngoại lệ là gì?
Ngoại lệ là một sự kiện, có thể làm xáo trộn dòng chương trình bình thường. Ngoại lệ tên đến từ sự kiện đặc biệt của hồi giáo. Ném một ngoại lệ là quá trình tạo một đối tượng ngoại lệ và chuyển nó cho hệ thống thời gian chạy. Đối tượng ngoại lệ được tạo bằng phương thức trong đó ngoại lệ xảy ra. Đối tượng ngoại lệ chứa thông tin hữu ích như loại và mô tả ngoại lệ. Khi hệ thống thời gian chạy nhận được đối tượng ngoại lệ, nó sẽ cố gắng tìm ai đó để xử lý nó trong ngăn xếp cuộc gọi bằng cách duyệt qua nó theo thứ tự ngược lại (trong đó các phương thức được gọi). Ngăn xếp cuộc gọi là danh sách các phương thức được sắp xếp, được gọi trước phương thức xảy ra ngoại lệ. Hệ thống thời gian chạy thành công nếu nó tìm thấy một phương thức với một trình xử lý ngoại lệ. Trình xử lý ngoại lệ là một khối mã có thể chính thức xử lý ngoại lệ nói trên. Nếu hệ thống thời gian chạy tìm thấy một trình xử lý thích hợp (nghĩa là loại ngoại lệ phù hợp với loại có thể được xử lý), nó sẽ chuyển đối tượng ngoại lệ cho trình xử lý. Điều này được gọi là bắt ngoại lệ. Tuy nhiên, nếu ngoại lệ không thể được xử lý, chương trình sẽ chấm dứt. Trong Java, các ngoại lệ kế thừa từ 'Lớp có thể ném được.' NullPulumException và ArrayIndexOutOfBoundException là hai ngoại lệ phổ biến trong Java.
Lỗi là gì?
Lỗi là một điều kiện có thể được coi là không thể phục hồi, chẳng hạn như chương trình yêu cầu dung lượng bộ nhớ lớn hơn dung lượng khả dụng. Những lỗi này không thể được xử lý trong thời gian chạy. Nếu xảy ra lỗi, chương trình sẽ chấm dứt. Trong Java, lỗi kế thừa từ lớp throwable. Lỗi thường xảy ra đối với các vấn đề nghiêm trọng mà lập trình viên (hoặc ứng dụng) không nên cố gắng nắm bắt. Lỗi chỉ đơn giản là các điều kiện bất thường, không bao giờ được dự kiến sẽ xảy ra trong các trường hợp bình thường, và do đó không bao giờ thấy trước. Ví dụ, OutOfMemoryError, StackOverflowError và ThreadDead là những lỗi như vậy. Các phương thức không bao giờ có lỗi xử lý.
Sự khác biệt giữa Ngoại lệ và Lỗi là gì??
Cả lỗi và ngoại lệ đều xảy ra không mong muốn trong quá trình thực thi chương trình. Tuy nhiên, họ có sự khác biệt chính. Các ngoại lệ có thể thấy trước bởi lập trình viên, trong khi một lỗi khó thấy trước. Các ngoại lệ có thể được kiểm tra hoặc bỏ chọn. Nhưng lỗi luôn luôn không được kiểm tra. Các ngoại lệ thường chỉ ra lỗi do lập trình viên gây ra. Tuy nhiên, lỗi xảy ra do lỗi hệ thống hoặc sử dụng tài nguyên không phù hợp. Do đó, các trường hợp ngoại lệ nên được xử lý ở cấp ứng dụng, trong khi các lỗi nên được xử lý ở cấp hệ thống (chỉ khi có thể). Sau khi xử lý một ngoại lệ, bạn được đảm bảo trở lại luồng chương trình bình thường. Nhưng ngay cả khi một lỗi được bắt gặp, lập trình viên có thể không biết cách xử lý nó ngay từ đầu. Không giống như xử lý lỗi truyền thống, các ngoại lệ cho phép tách mã xử lý lỗi khỏi mã thông thường.