2012-10-18 28 views
8

Giống như một thử nghiệm, tôi quyết định bật điểm ngắt sau trong trình gỡ lỗi Eclipse: Throwable [Include Subclasses]: caught and uncaught. Sau đó, tôi cho phép mã của tôi (đang chạy "tốt" theo như tôi biết) chạy dưới trình gỡ lỗi và đã ngạc nhiên khi thấy hàng tá trường hợp ngoại lệ bị ném và bị bắt (trước đây chưa biết đến tôi) bằng mã thư viện chuẩn của J2SE khi mã của tôi chạy bình thường cho tất cả những gì tôi biết.Mã thư viện java có bình thường để ném và bắt rất nhiều ngoại lệ trong quá trình xử lý "bình thường" không?

Ví dụ: đây chỉ là một số chức năng của khung công tác Java mà tôi đã tìm thấy khi ném các ngoại lệ: URLClassLoader.findClass, FileDirContext.lookupWebappClassLoader.findClassInternal.

Đây có phải là hành vi bình thường đối với một ứng dụng Java không? Đây có phải là thứ tôi nên xem xét không? Mã của tôi dường như chạy tốt như xa như tôi biết.

+1

Tất cả âm thanh hợp lý: ngoại lệ xảy ra khi cơ chế truy xuất chính (hoặc * n * -ary nói chung) không thành công và có thể được xử lý bằng cách thử cơ chế thứ cấp (hoặc (* n + 1 *) - ary nói chung) . –

+1

Bạn nên làm theo các đặc điểm kỹ thuật (tài liệu) trên các phương pháp hơn là lo lắng về những gì họ có thể làm trong nội bộ. Đó là loại nghiên cứu chỉ cần thiết nếu việc thực hiện không hoạt động như mong đợi theo đặc điểm kỹ thuật. –

+0

Đó là một câu hỏi rất hay, và tôi đoán câu trả lời phụ thuộc vào các ngoại lệ cụ thể đang được ném ra. Nói chung, như một quy tắc ngón tay cái, đó là một thực tế tồi để thiết kế mã của bạn dựa vào việc bắt ngoại lệ vì các trường hợp ngoại lệ rất tốn kém. Đọc tốt: http://www.ibm.com/developerworks/java/library/j-jtp05254/index.html – alfasin

Trả lời

0

Trường hợp ngoại lệ được ném trong quá trình tải lớp là relic từ những ngày đầu trong lịch sử Java khi tải lớp được thiết kế để sử dụng chúng như một cách để giao tiếp mà một số trình nạp lớp không thể tìm thấy lớp học. Nó không được coi là một mô hình tốt bây giờ nhưng nó vẫn còn đó và có lẽ sẽ không được thay đổi bao giờ vì nó là một phần của API. Không có gì phải sợ.

2

Mặc dù việc thiết kế mã theo cách này không tốt (ngoại trừ chậm và nên được sử dụng trong các trường hợp ngoại lệ), nhận xét của Bhesh Gurung là cách đúng đắn để suy nghĩ về điều này. Thực hiện theo các đặc điểm kỹ thuật của mã bạn đang dựa vào, và đừng lo lắng về việc thực hiện.

+0

Có thể cho rằng, nó ** là một trường hợp ngoại lệ ** khi tải tài nguyên được yêu cầu không thành công. Đây chính là định nghĩa về trường hợp sử dụng các ngoại lệ đã kiểm tra: ** ** dự kiến ​​**, nhưng ** trường hợp ngoại lệ **. –

Các vấn đề liên quan