gói javax vs java


385

Lý do đằng sau gói javax là gì? Điều gì đi vào java và những gì vào javax?

Tôi biết rất nhiều gói Enterprise-y có trong javax, nhưng Swing cũng vậy, api ngày và giờ mới (JSR-310) và các gói J2SE khác.



Một gói tùy chọn là một thực hiện một mở, tiêu chuẩn API (ví dụ về các gói tùy chọn JavaServlet, Java3D). Hầu hết các gói tùy chọn được bắt nguồn từ javax.*không gian tên, mặc dù có thể có ngoại lệ.
May mắn

Câu trả lời:


212

Tôi nghĩ đó là một điều lịch sử - nếu một gói được giới thiệu như là một bổ sung cho JRE hiện có, thì nó sẽ xuất hiện dưới dạng javax. Nếu lần đầu tiên nó được giới thiệu như là một phần của JRE (giống như NIO, tôi tin) thì nó sẽ xuất hiện java. Không chắc chắn tại sao API ngày và thời gian mới sẽ kết thúc javaxtheo logic này mặc dù ... trừ khi nó cũng sẽ có sẵn như một thư viện để làm việc với các phiên bản trước đó (sẽ hữu ích). Lưu ý từ nhiều năm sau: cuối cùng nó thực sự tồn tại java.

Tôi tin rằng có các hạn chế đối với javagói - Tôi nghĩ rằng các trình nạp lớp được thiết lập để chỉ cho phép các lớp bên trong java.*được tải từ rt.jarhoặc một cái gì đó tương tự. (Chắc chắn có một kiểm tra ClassLoader.preDefineClass.)

EDIT: Mặc dù một lời giải thích chính thức (orbfish tìm kiếm được đề xuất không mang lại một trong trang đầu tiên hoặc lâu hơn) không nghi ngờ gì về "lõi" so với "phần mở rộng", tôi vẫn nghi ngờ rằng trong nhiều trường hợp, quyết định cho bất kỳ gói cụ thể nào có lý do lịch sử đằng sau nó quá. Có java.beansthực sự là "cốt lõi" đối với Java không?


7
Bởi vì người đọc aa dễ dàng nhấn alt-t và gõ nó hơn là để tôi cắt và dán bằng iPad? ;). Mặc dù vậy, bạn nói đúng, tôi nghĩ tôi có nghĩa là download.oracle.com/javase/tutorial/ext/index.html . Không có vi phạm BTW Tôi thường thấy câu trả lời của bạn hữu ích Tôi chỉ ngạc nhiên khi câu trả lời này được chấp nhận.
orbfish

1
Thuật ngữ "javax" không xuất hiện ở bất cứ đâu trong liên kết được đề xuất trước đó trong chuỗi nhận xét này.
cuốn sách nhỏ

API ngày và thời gian mới thực sự sẽ kết thúc như java.timesau tất cả.
Michael Piefel

234

Ban đầu javaxđược dự định là dành cho các tiện ích mở rộng và đôi khi mọi thứ sẽ được quảng bá ra khỏi javaxjava.

Một vấn đề là Netscape (và có lẽ là IE) giới hạn các lớp có thể có trong gói java.

Khi Swing được thiết lập để "tốt nghiệp" javatừ javaxđó sẽ xảy ra một vụ nổ nhỏ vì mọi người nhận ra rằng họ sẽ phải sửa đổi tất cả hàng nhập khẩu của mình. Cho rằng khả năng tương thích ngược là một trong những mục tiêu chính của Java, họ đã thay đổi quyết định.

Tại thời điểm đó, ít nhất là đối với cộng đồng (có thể không phải đối với Mặt trời), toàn bộ điểm javaxđã bị mất. Vì vậy, bây giờ chúng tôi có một số điều trong javax có lẽ nên có java... nhưng ngoài những người đã chọn tên gói tôi không biết liệu có ai có thể tìm ra lý do hợp lý trong từng trường hợp cụ thể không.


12
"Khi Swing được thiết lập để" tốt nghiệp "thành java từ javax, có một sự cố nhỏ vì mọi người nhận ra rằng họ sẽ phải sửa đổi tất cả các bản nhập của họ." Mọi người đã phàn nàn về một cái gì đó có thể được thực hiện với một biểu thức chính là kết quả của việc họ sử dụng mã chất lượng tiền sản xuất?
Sled

10
Vâng Tôi đã viết một công cụ trong Visual Cafe để chuyển đổi giữa hai (javax và java) trước khi Sun quyết định chỉ giữ nó trong gói javax.
TofuBeer

51

javacác gói là cơ sởjavaxcác gói là phần mở rộng.

Swing là một phần mở rộng vì AWT là API UI gốc. Swing đến sau đó, trong phiên bản 1.1.


Swing không phải là một phần của 1.1. Có một phiên bản của Swing chạy trên 1.1 dưới dạng thư viện.
Tom Hawtin - tackline

Có khóa - "thư viện", không phải là một phần của JDK. Tôi có phiên bản sai? Javadocs của tôi đề xuất rằng JButton đã có từ 1.3, vì vậy có lẽ bộ nhớ của tôi đã làm tôi thất vọng.
duffymo

1
Vậy tại sao API ngày và giờ mới trong javax .. ngày và giờ không phải là "cơ sở"?
Pacerier

1
"... api ngày và giờ mới (JSR-310) ..." - một người nào đó tại Oracle / Sun đã quyết định rằng nó nên được đưa vào javax tốt hơn, bởi vì đó là một phần mở rộng mới hơn của các thư viện lõi. Nếu bạn không đồng ý, tốt nhất nên đưa nó lên với họ.
duffymo

Chỉ để tham khảo: họ đã hoàn nguyên quyết định đó và JSR-310 được đặt dưới java.timeđây: docs.oracle.com/javase/8/docs/api/java/time/ phỏng
Mark Rotteveel

37

Không gian tên javax thường (đó là một từ được tải) được sử dụng cho các tiện ích mở rộng tiêu chuẩn, hiện được gọi là các gói tùy chọn . Các phần mở rộng tiêu chuẩn là một tập hợp con của các API không cốt lõi; phân đoạn khác của các API không cốt lõi rõ ràng được gọi là các phần mở rộng không chuẩn, chiếm các không gian tên như com.sun. * hoặc com.ibm. . Các API cốt lõi chiếm java. không gian tên.

Không phải mọi thứ trong thế giới API Java đều bắt đầu từ cốt lõi, đó là lý do tại sao các tiện ích mở rộng thường được sinh ra từ các yêu cầu JSR. Cuối cùng họ được thăng cấp lên cốt lõi dựa trên 'cố vấn khôn ngoan'.

Sự quan tâm đến danh pháp này, xuất phát từ một phần giả mạo của Sun - các tiện ích mở rộng có thể đã được thăng cấp thành cốt lõi, tức là chuyển từ javax. * Sang java. * Phá vỡ lời hứa tương thích ngược. Các lập trình viên đã khóc khàn, và cảm giác tốt hơn đã thắng thế. Đây là lý do tại sao, API API mặc dù là một phần của lõi, vẫn tiếp tục tồn tại trong không gian tên javax. *. Và đó cũng là cách các gói được quảng bá từ các phần mở rộng đến cốt lõi - chúng chỉ đơn giản là có sẵn để tải xuống như một phần của JDK và JRE.


2

Javax được sử dụng chỉ dành cho các phần mở rộng. Tuy nhiên, sau đó, mặt trời đã thêm nó vào java libary mà quên xóa x. Các nhà phát triển bắt đầu tạo mã bằng javax. Tuy nhiên, sau đó, mặt trời đã quyết định đổi nó thành java. Các nhà phát triển không thích ý tưởng này vì mã của họ sẽ bị hủy hoại ... vì vậy javax đã được giữ.


1

Các gói java. * là các gói ngôn ngữ Java cốt lõi, có nghĩa là các lập trình viên sử dụng ngôn ngữ Java phải sử dụng chúng để sử dụng ngôn ngữ java một cách đáng giá.

Các gói javax. * là các gói tùy chọn, cung cấp một cách tiêu chuẩn, có thể mở rộng để cung cấp các API tùy chỉnh có sẵn cho tất cả các ứng dụng chạy trên nền tảng Java.


0

Một số gói như javax.swingkhông được bao gồm trong thư viện tiêu chuẩn java lúc đầu. Công ty Sun quyết định coi chúng là chính thức và đưa chúng vào các phiên bản đầu tiên của java dưới dạng thư viện tiêu chuẩn hoặc tiện ích mở rộng tiêu chuẩn.

Theo quy ước, tất cả các tiện ích mở rộng tiêu chuẩn bắt đầu Xtrong một thời gian chúng có thể được thăng hạng lên hạng nhất theo thời gian như những gì đã xảy ra javax.swing.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.