2009-11-01 8 views

Trả lời

17

Nếu không, bạn sẽ phải có các khối thử/nắm bắt mỗi khi bạn truy cập phần tử mảng, đã thực hiện phép chia và nhiều trường hợp phổ biến khác.

Nói một cách khác, hãy tưởng tượng mã này:

Map map = ... 
int i = ... 
(int[])map.get("foo")[3] = 2334/i; 

sẽ phải kiểm tra ClassCastException, ArrayIndexOutofBoundsException, ArithmeticException, UnsupportedOperationExceptionNullPointerException chỉ ra khỏi đỉnh đầu của tôi.

Với Java vấn đề không phải là ngoại lệ không được kiểm soát. Các ngoại lệ được kiểm tra là một chủ đề gây nhiều tranh cãi. Một số người nói điều này phần lớn là một thử nghiệm với Java và trong thực tế họ không làm việc nhưng bạn sẽ tìm thấy nhiều người cho rằng họ là tốt.

Không ai tranh cãi về ngoại lệ không được kiểm soát là xấu.

+0

"Không ai tranh cãi về ngoại lệ không được kiểm soát là xấu" - bạn sẽ ngạc nhiên :-) Big +1 trên mọi thứ khác, mặc dù. – ChssPly76

+0

cảm ơn @cletus. – Moeb

+6

Thực tế, nếu kiểm tra ngoại lệ thời gian chạy, sẽ khó xử lý ngoại lệ, vì hầu hết mọi thứ bạn có thể thực hiện trong khối catch có thể gây ra ngoại lệ thời gian chạy mới, do đó sẽ phải được xử lý ... –

1

Điều này đơn giản có nghĩa là trình biên dịch sẽ không buộc bạn phải tìm một ngoại lệ, nhưng bạn vẫn có thể ném nó vào thời gian chạy. Là một lợi ích, điều này cho phép bạn ném ngoại lệ mới từ các lớp học của bạn mà không yêu cầu bạn thay đổi giao diện của bạn, khiến người gọi thay đổi mã của họ.

8

Ý tưởng về hai loại ngoại lệ trong Java (được chọn và bỏ chọn) là các ngoại lệ được kiểm tra nên được sử dụng cho các điều kiện lỗi có thể xảy ra hợp lý và không được kiểm soát ngoại lệ.

Ví dụ: nếu không tìm thấy tệp, bạn sẽ nhận được FileNotFoundException và thật hợp lý để mong đợi chương trình của bạn có thể xử lý điều kiện như vậy. Các ngoại lệ không được kiểm tra chỉ nên được sử dụng cho các vấn đề không nên xảy ra và điều đó thực sự có nghĩa là có lỗi trong chương trình nếu xảy ra sự cố như vậy. Ví dụ: NullPointerException có nghĩa là chương trình của bạn đang cố gắng coi trọng biến là null và đó có thể là lỗi nhất.

Trình biên dịch Java buộc lập trình viên xử lý các ngoại lệ đã kiểm tra. Điều này làm cho ngôn ngữ lập trình an toàn hơn - điều đó có nghĩa là lập trình viên buộc phải suy nghĩ về các điều kiện lỗi, điều này sẽ làm cho chương trình trở nên mạnh mẽ hơn.

Trình biên dịch không kiểm tra các ngoại lệ không được kiểm soát, bởi vì các ngoại lệ không được kiểm tra không được phép xảy ra và nếu có, không có chương trình nào có thể thực hiện hợp lý khi chạy; lập trình viên phải giải quyết lỗi.

Đã có một số lời chỉ trích đối với tính năng này trong Java, một số người thậm chí còn gọi các ngoại lệ đã kiểm tra a failed experiment và một số người propose to remove checked exceptions từ Java.

+0

+1 cho điều này mô tả gọn gàng. – Reuben