2012-02-29 5 views
6

Khi tôi truy cập JavaDocs, tôi tìm thấy một số lớp trong gói java trong khi một số nằm trong số javax. Sau đó, tôi đã xem qua số javax vs java package.Một số câu hỏi cơ bản về gói javax và java

Tôi nhận được gì từ liên kết này gần như từ tất cả các câu trả lời là gói javax chỉ là phần mở rộng của thư viện java. Tôi có nghĩa là Java đầu tiên phải đi kèm với các thư viện Java lõi I.E. java gói nhưng khi một số gói khác đã phát triển chúng được phát hành với javax. Đúng?

Một số câu hỏi ngay lập tức xuất hiện trong tâm trí của tôi với tư cách là nhà phát triển. Ý nghĩa của những gói được đặt tên khác nhau cho một nhà phát triển Java là gì. Dưới đây là các câu hỏi và phân tích: -

  1. Ngay cả khi tôi đồng ý javax chỉ là phần mở rộng của java lõi. Nhưng sau đó một lần nữa tôi thấy các gói hoàn toàn khác nhau như org.omg.CORBA vv. Tại sao lại có tên là javax.omg.CORBA?
  2. Làm các gói này như javax, org, đi kèm với tải xuống JDK và JRE tiêu chuẩn? Những nhu cầu này có cần được tải xuống riêng biệt từ JSE 1.6 không?
  3. Trình nạp lớp bootstrap có cố gắng tìm các lớp trong các gói này theo mặc định như trong trường hợp các lớp Java lõi (như java.lang).
+0

Tôi không hiểu câu hỏi đầu tiên ... Bạn có thể vui lòng ghi chi tiết/viết lại nó không? – m0skit0

+1

bản sao có thể có của [javax vs java package] (http://stackoverflow.com/questions/727844/javax-vs-java-package) –

Trả lời

4

Tôi nghĩ nó khá tùy ý. Như Jon Skeet nói trong câu trả lời của mình cho câu hỏi mà bạn liên kết, phần lớn trong số đó là lịch sử. Một ví dụ tốt về điều này là javax.sql - nó chứa các lớp để làm với JDBC vốn ban đầu là một phần của J2EE, nhưng được đưa vào J2SE trong 1.4. Vì vậy, bây giờ có một phân chia vô nghĩa các lớp giữa java.sql và javax.sql. Không có ý nghĩa cụ thể gắn liền với việc phân chia java/javax bên trong JDK.

  1. Các lớp CORBA là chúng ở đâu vì chúng không được xác định bởi tiêu chuẩn Java; chúng là bản dịch của các giao diện được định nghĩa trong các đặc tả của CORBA.
  2. Có rất nhiều gói javax. * Đi kèm với tiêu chuẩn J2SE JDK/JRE (javax.sql, javax.xml). Ngoài ra còn có các gói javax. * Không có (javax.inject, javax.servlet, v.v.). Nhưng không có gói java. * Không có trong JDK.
  3. Tôi tin rằng trình nạp lớp bootstrap tải các lớp java. * Và javax. * Giống nhau.
+0

Cảm ơn Tom đã làm rõ. hai làm rõ hơn như bạn đã nói với lớp corba không được xác định bởi standar java nhưng họ tôi có thể xem các lớp này theo jre6/jdk.1.6 lik class org.omg.CORBA.AnyHolder. Một câu hỏi khác tôi muốn hỏi tại sao javax.servlet, không được bao gồm trong lõi java kib khi nó được sử dụng rộng rãi. Có phải vì chúng là container servlet cụ thể như tomcat và meainig khác nhau cho họ? Thats lý do tại sao tôi có thể nhìn thấy các thư viện này inder container/lib thư mục nhưng không phải là một phần của jre6/jdk1.6? –

+0

Các lớp Corba được bao gồm trong JDK, cũng giống như những thứ cơ bản như java.lang.String, mặc dù Sun không định nghĩa chúng. Họ nghĩ rằng họ rất hữu ích mà mọi người nên có chúng (hoặc ít nhất, họ đã trở lại vào năm 1998). Cũng vậy với các lớp org.w3c.dom và org.xml.sax. –

+1

Các lớp servlet không có trong JDK vì không có cách nào để sử dụng chúng mà không có một thùng chứa servlet (như Tomcat hoặc Jetty). Ví dụ, không thể sử dụng chúng trong ứng dụng máy tính để bàn hoặc applet. Vì vậy, chúng không có trong JDK cơ bản. –

1
  1. Chúng thường đến từ các bên không phải là Sun/Oracle. VÍ DỤ. Gói org.omg đã được tạo (rõ ràng) bởi những người ở số http://omg.org/ Bạn có thấy kết nối giữa tên gói và tên miền không?
  2. Không, nếu chúng được liệt kê trong JavaDocs J2SE cho một phiên bản cụ thể, chúng có tiêu chuẩn với phiên bản đó. Dưới đây là các gói có sẵn cho (bao gồm theo mặc định) phiên bản J2SE 6 & 7.
  3. Có, chúng tự động nằm trên đường dẫn lớp. Thử nhập một trong các lớp và biên dịch/chạy nó để xác nhận điều đó. OTOH lưu ý rằng họ cũng giống như các lớp AWT (Color, Font vv), nơi họ có thể được nhập khẩu, như trái ngược với java.lang gói, có lớp học làm không cần phải có một tuyên bố nhập khẩu trong các mã.

java.lang không cần phải được nhập khẩu ..Is nó vì lớp lang được sử dụng thường xuyên hơn?

Về cơ bản, có. Lưu ý rằng nó chỉ liên quan đến trình biên dịch. Các tệp lớp chứa tên lớp đầy đủ, AFAIU.

+0

Một câu hỏi nữa là bạn có bất kỳ ý tưởng nào về việc tại sao java.lang không cần phải được nhập trong khi khác cần phải được trong jre6. Có phải vì các lớp học lang được sử dụng thường xuyên hơn? –

+0

Xem chỉnh sửa ... –

2

Trước đây, ý tưởng là các gói java. * Sẽ là gói được gửi cùng với JDK và gói javax. * Sẽ là các gói phải được tải xuống riêng. Nó vẫn hoạt động theo cách này, đến một mức độ nào đó; tất cả các gói java. * đều đi kèm với JDK và có nhiều gói javax. *, như cho các servlet, mà phải được tải xuống riêng biệt.

Cờ lê khỉ được ném vào sơ đồ này khi Sun quyết định di chuyển một số gói javax. *, Như Swing, vào JDK chính. Họ thực sự sẽ thay đổi tên gói từ javax.swing thành java.swing, nhưng khi nó trở nên rõ ràng rằng điều này sẽ phá vỡ khả năng tương thích ngược cho một số lượng lớn mã, họ quyết định thay vì di chuyển các gói vào, nhưng giữ javax. tên xoay. Vì vậy, tên không còn mang tính chỉ dẫn nữa, nhưng có lý do lịch sử.

Nó sẽ không làm tôi ngạc nhiên nếu điều tương tự xảy ra với các gói org.omg và org.w3c (chúng là thư viện của bên thứ ba đã được chuyển vào JDK lõi và không thể thay đổi tên). Bất kể, nếu nó nằm trong tài liệu API JDK, bạn có thể sử dụng nó mà không cần tải bất cứ thứ gì ngoài JDK chính, và trình nạp lớp sẽ thấy nó tốt.