Sự khác biệt giữa ngoại lệ và lỗi

Anonim

Ngoại lệ và lỗi

Hành vi không mong muốn 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 dò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ác ngoại lệ chủ yếu liên quan đến bản thân ứng dụng, trong khi các 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 phiền dòng chương trình bình thường. Trường hợp ngoại lệ xuất phát từ "sự kiện đặc biệt". Vứt bỏ một ngoại lệ là quá trình tạo ra một đối tượng ngoại lệ và đưa nó đến hệ thống thời gian chạy. Đối tượng ngoại lệ được tạo ra bởi phương pháp trong đó xảy ra ngoại lệ. Đối tượng ngoại lệ chứa thông tin hữu ích như kiểu 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 đi qua nó theo thứ tự ngược lại (trong đó các phương pháp đã được gọi). Gọi cuộc gọi là danh sách được sắp xếp của các phương thức, được gọi trước khi phương pháp trong trường hợp 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ời gian chạy tìm một trình xử lý thích hợp (ví dụ loại ngoại lệ phù hợp với loại có thể xử lý), nó sẽ vượt qua đối tượng ngoại lệ cho trình xử lý. Đây được gọi là catching the exception. Tuy nhiên, nếu ngoại lệ không thể xử lý, chương trình sẽ chấm dứt. Trong Java, các ngoại lệ thừa hưởng từ 'Throwable class. 'NullPointerException và ArrayIndexOutOfBoundsException 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 được chẳng hạn như chương trình đòi hỏi một lượng bộ nhớ lớn hơn những gì có sẵn. Những lỗi này không thể xử lý được khi chạy. Nếu lỗi xảy ra, chương trình sẽ chấm dứt. Trong Java, lỗi thừa hưởng từ lớp Throwable. Lỗi thường đứng cho những 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 đơn giản chỉ là các điều kiện bất thường, điều này không bao giờ xảy ra trong những hoàn cảnh bình thường, và do đó không bao giờ dự kiến. Ví dụ, OutOfMemoryError, StackOverflowError và ThreadDead là những lỗi như vậy. Các phương pháp không nên bao giờ có xử lý cho các lỗi.

Sự khác biệt giữa Ngoại lệ và Lỗi là gì?

Cả hai lỗi và ngoại lệ là sự xuất hiện không mong muốn trong quá trình thực hiện chương trình. Tuy nhiên, họ có những điểm khác biệt chính. Ngoại lệ có thể được dự đoán bởi các lập trình viên, trong khi một lỗi rất khó để lường trước.Ngoại lệ có thể được kiểm tra hoặc bỏ chọn. Nhưng lỗi luôn bị bỏ qua. Các ngoại lệ thường chỉ ra lỗi do lập trình gây ra. Tuy nhiên, lỗi xảy ra do lỗi hệ thống hoặc việ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 lỗi phải được quan tâm ở 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 chương trình bình thường dòng chảy. Nhưng ngay cả khi một lỗi là đánh bắt, lập trình có thể không biết làm thế nào để xử lý nó ở nơi đầu tiên. 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 từ mã thông thường.