Tôi đã viết một số chương trình thực hành cho chứng nhận java của tôi sáng nay, và nhận thấy rằng tôi đã gõ nhầm tên gói, vì vậy nó không khớp với thư mục con tệp java. Tôi biên dịch mã mong đợi một lỗi, nhưng mọi thứ đã biên dịch tập tin - thậm chí không phải là cảnh báo.Không gói phải phù hợp với các thư mục con các tập tin java là trong?
Tôi googled xung quanh một chút, và hầu hết các trang tôi đọc nói rằng tên gói phải phù hợp với thư mục con. Kinh nghiệm của tôi cho thấy đó không phải là trường hợp.
Khi tôi cố gắng chạy chương trình, nó không hoạt động vì tệp .class nằm trong thư mục sai. Tôi chuyển nó vào thư mục chính xác, và đã nhận lỗi này:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sample/directory
/doesnt/even/exist/OtherPackageMemberModifiers (wrong name: com/sample/chap01/O
therPackageMemberModifiers)
Vì vậy, những gì tôi nghĩ tôi nhìn thấy là mã Java sẽ biên dịch nếu gói và các thư mục con không trùng khớp nhau nhưng có dường như không phải là cách để chạy mã nếu bạn làm điều đó. Đúng không?
Hiện tượng rằng con đường gói và đường dẫn thư mục là dư thừa cho thấy cái đầu khó chịu của nó. Trình biên dịch sẽ có quyền phát hành một lỗi. Tuy nhiên, đó sẽ không phải là 100%: gói src.main.java.com.sample ... hoặc gói com.sample. ... vẫn sẽ không có lỗi. Javac sẽ cần phải được dựa trên thư mục (-d) và nó là cơ bản dựa trên tập tin. –