JavaRush /Blog Java /Random-VI /Bản dịch: 6 ngoại lệ Java gây khó chịu cho những người mớ...
profeg
Mức độ

Bản dịch: 6 ngoại lệ Java gây khó chịu cho những người mới làm quen với Java.

Xuất bản trong nhóm

6 ngoại lệ Java ám ảnh người mới bắt đầu học Java

(Bản gốc) (Tôi mới làm quen với cả Java và tiếng Anh nên sẽ rất vui khi nhận được những lời chỉ trích và giúp đỡ) Cả trước đây và bây giờ, tôi đều gặp nhiều người mới sử dụng Java gặp vấn đề với một số ngoại lệ phổ biến mà tôi phải giải thích lại một lần nữa. Tôi tin rằng các nhà phát triển Java cấp cao khác cũng gặp vấn đề tương tự khi cố gắng giúp người mới giải quyết những trường hợp ngoại lệ này. Vì vậy, tôi đã viết bài viết này cho sự phát triển của riêng tôi. Xin vui lòng bình luận về bài viết này hoặc thêm trường hợp ngoại lệ vào danh sách bên dưới.
1. NoClassDefFoundError
Đây là một trong những trường hợp ngoại lệ, với thông báo như “Ngoại lệ trong luồng “chính” NoClassDefFoundError” mà hầu hết các nhà phát triển Java mới gặp phải trong thế giới lập trình Java. Người mới bắt đầu viết chương trình hiển thị “Xin chào thế giới!”, đi tới dòng lệnh, gõ “java …”, nhấn enter và BAM! =). Và tìm cách làm cho chương trình in ra dòng chữ “Xin chào thế giới!” trên màn hình, mất một chút thời gian. NoClassDefFoundError xảy ra khi Máy ảo Java (JVM) cố gắng truy cập một lớp khi khởi động và không tìm thấy lớp đó, mặc dù lớp đó đã được tìm thấy tại thời điểm biên dịch. Thông thường, ngoại lệ này xảy ra khi cố gắng thực thi một chương trình bằng lệnh "java" và đường dẫn lớp không được đặt đúng. Dưới đây là mô tả lý do tại sao ngoại lệ này xảy ra.
  • Lớp này không có sẵn trong -classpath.
  • Biến môi trường CLASSPATH đã bị ghi đè. Bạn có thể kiểm tra sự hiện diện và tính chính xác của nó bằng lệnh Windows “set”.
Giải pháp cho vấn đề được mô tả chi tiết hơn ở đây.
Hơn nữa, bạn cần hiểu sự khác biệt giữa biến môi trường CLASSPATH và khóa thông dịch -classpath. Các chuyên gia không khuyên bạn nên sử dụng CLASSPATH. Cách tốt nhất là chuyển khóa -classpath cho trình thông dịch.
2. Ngoại lệ ClassNotFoundException
ClassNotFoundException là một ngoại lệ khác có thể trở thành cơn ác mộng đối với người mới bắt đầu lập trình. Điều thú vị là, nhà phát triển Java thông thường thường bị nhầm lẫn giữa các ngoại lệ ClassNotFoundException và NoClassDefFoundError . Và do đó, sự khác biệt giữa hai trường hợp ngoại lệ này vẫn là một trong những câu hỏi thường gặp nhất trong các cuộc phỏng vấn cho vị trí Junior . ClassNotFoundException xảy ra khi JVM cố tải một lớp cụ thể và không tìm thấy nó trong đường dẫn lớp. Một trong những nơi phổ biến mà nhà phát triển Java mới gặp lần đầu tiên là kết nối với cơ sở dữ liệu bằng thư viện JDBC. Ở đó chúng tôi sẽ thử tải trình điều khiển bằng mã như Class.forName("JDBCdriver"). Một bài viết hay về ClassNotFoundException có ở đây . Cố gắng hiểu khái niệm về Trình nạp lớp Java là phương pháp hiệu quả nhất để giải quyết vấn đề này. Bạn có thể đọc cách định cấu hình đường dẫn lớp Java trong môi trường Win/Unix . Như đã nêu trong tài liệu java , một ngoại lệ xảy ra trong các trường hợp sau:
  • Bạn cố tải một lớp bằng phương thức Class.forName và tệp .class không có trong đường dẫn lớp. Đây là tình huống phổ biến nhất trong ba tình huống được liệt kê ở đây.
  • Khi trình nạp lớp cố gắng tải một lớp bằng phương thức LoadClass.
  • Khi trình nạp lớp cố gắng tải một lớp bằng findSystemClass.
3. Ngoại lệ NullPointer
Ngoại lệ này dễ hiểu hơn đối với người mới bắt đầu so với hai ngoại lệ đầu tiên. Hơn nữa, ngoại lệ này dễ dàng được xác định bởi vì khi nó xảy ra, thông báo về ngoại lệ sẽ cho biết số dòng trong chương trình nơi nó xảy ra. Ngoại lệ này xảy ra khi JVM cố gắng truy cập một đối tượng hoặc cố gắng gọi một phương thức trên một đối tượng và nhận được giá trị rỗng thay vì tham chiếu đến đối tượng. Tài liệu Java cũng nêu các lý do sau:
  • Truy cập hoặc thay đổi một phương thức trên một đối tượng không hợp lệ. (tức là thay vì tham chiếu đến đối tượng JVM, nó sẽ rỗng)
  • Lấy độ dài của một mảng khi nó không hợp lệ. (ví dụ không được khởi tạo)
  • Một nỗ lực đã được thực hiện để truy cập vào phần tử mảng không tồn tại thuộc loại Object. (tức là khi thay vì tham chiếu đối tượng, phần tử mảng chứa null)
Phương pháp đơn giản nhất để tránh ngoại lệ này là sử dụng kiểm tra không NULL. Tuy nhiên, sớm hay muộn, điều này sẽ trở thành một thông lệ phát triển Java và bạn sẽ tìm thấy các kiểm tra không NULL ở khắp mọi nơi . Và lý do chính để sử dụng kiểm tra non-NULL là nhà phát triển muốn chuyển một đối tượng null trong trường hợp bị lỗi hoặc có lỗi. Thay vào đó, đó là một phương pháp lập trình tốt mà các lập trình viên nên sử dụng để trả về một đối tượng trống, thay vì giá trị null , đây là logic cơ bản về cách chương trình sẽ hoạt động trong trường hợp có lỗi. Tuy nhiên, việc áp dụng phương pháp lập trình này khó hơn bạn tưởng.
Có một bài viết hay về điều này trên tài nguyên của chúng tôi.
4. Ngoại lệ ClassCast
Đây là một ngoại lệ khác quen thuộc với người mới bắt đầu, xảy ra khi cố gắng truyền một đối tượng vào một lớp không phải là lớp con của nó. Một lần nữa, điều này khá dễ hiểu, dễ xác định và dễ khắc phục. Một cách để tránh ngoại lệ này khi không xác định được loại đối tượng trong thời gian chạy là sử dụng "InstanceOf" để kiểm tra xem đối tượng có phải là phiên bản của một lớp cụ thể hay không.
5. Ngoại lệ ArrayIndexOutOfBounds
Ngoại lệ này tự giải thích và xảy ra khi JVM cố gắng truy cập một phần tử mảng có chỉ mục không tồn tại, chẳng hạn như âm (-1) hoặc lớn hơn hoặc bằng kích thước của mảng. Nó khá dễ hiểu, dễ định nghĩa và chính xác . Ví dụ: khi tạo một vòng lặp, for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]); một ngoại lệ xảy ra, vì trong mảng các chỉ mục bắt đầu từ 0 và phương thức length trả về số phần tử và số này lớn hơn 1 so với giá trị của chỉ mục cuối cùng. Sử dụng đúng for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
6. Ngoại lệ đối số bất hợp pháp
Ngoại lệ này ít phổ biến hơn và khá dễ hiểu, xác định và giải quyết. Nó xảy ra khi JVM cố gắng gọi một phương thức không tồn tại hoặc một phương thức có đối số không hợp lệ.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION