Có mối quan hệ giữa gói và thư mục, nhưng đó là mối quan hệ mà bạn phải duy trì. Nếu bạn có một lớp trong "mypackage1.mypackage2", điều đó có nghĩa là lệnh java
sẽ mong đợi tìm thấy nó trong cấu trúc thư mục có tên "mypackage1 \ mypackage2" (giả sử "ký hiệu Windows" ngược), với cấu trúc thư mục đó nhúng trong một thư mục (chúng ta hãy gọi nó là "myjava") có tên là trong classpath
(hoặc người nào khác là trực tiếp trong "thư mục hiện tại").
Vì vậy, lớp Java của bạn (trong đó nội bộ nói package mypackage1.mypackage2;
) là trong, nói, "\ Users \ myName \ myjava \ mypackage1 \ mypackage2 \", và bạn đặt "\ Users \ myName \ myjava" trong đường dẫn lớp hoặc bạn có thư mục hiện tại của bạn được đặt thành "\ Users \ myName \ myjava".
Nếu bạn kết hợp điều này, cả lớp sẽ không được tìm thấy chút nào, hoặc bạn sẽ gặp lỗi giống như "NoClassDefFoundError" vô tận.
Khi đến lý do tại sao người ta sẽ sử dụng gói (và thư mục), lý do phải làm với "không gian tên" và "tách mối quan tâm" (xem những điều đó). Java sẽ khó khăn hơn nhiều để giữ thẳng nếu không có gói nào và tất cả các "java.lang", "java.io", "sun.misc", các lớp et al cùng nhau. Trước hết, người ta sẽ phải sử dụng tên "tiền tố" để giữ chúng thẳng và tránh xung đột tên. Và nhiều nhóm hợp lý sẽ bị mất.
Với các dự án của riêng bạn, bạn không cần sử dụng gói cho các chương trình đơn giản mà bạn viết cho chính mình, nhưng nếu bạn viết một cái gì đó bạn có thể tặng cho người khác, hãy lịch sự sử dụng gói như "myname.myproject" (thay thế tên và dự án của bạn tất nhiên), vì vậy người bạn đưa nó vào có thể kết hợp nó với những người khác mà không có xung đột tên.
Trong các ứng dụng lớn, bạn sẽ tìm thấy bằng cách sử dụng các mức phân tách cao hơn giúp bạn giữ các chức năng thẳng, vì vậy bạn biết mọi thứ ở đâu. Nó cũng ngăn cản bạn từ "vượt qua ranh giới" giữa các khu chức năng khác nhau, vì vậy bạn không nhận được logic không liên quan entertwined.
Eclipse (nếu bạn sử dụng) loại lộn xộn vấn đề một chút vì nó "muốn" cung cấp tên thư mục và tên gói và đôi khi (nhưng không phải lúc nào) giữ chúng được đồng bộ.
googling tiêu đề của bạn cung cấp liên kết này http://stackoverflow.com/questions/9510932/java-package-vs-folder-structure-what-is-the-difference – gigadot
tôi không hiểu.hãy làm rõ.! – jbmeta
Điều này có nghĩa là câu hỏi đã được hỏi và bạn nên tra cứu câu hỏi này và các câu hỏi tương tự trước. –