แพ็กเกจ javax vs java


385

เหตุผลเบื้องหลังแพ็คเกจ javax คืออะไร จาวาคืออะไรและอะไรคือจาวาแม็กซ์

ฉันรู้ว่าแพ็คเกจ enterprise-y จำนวนมากอยู่ในรูปแบบของ javax แต่นั่นก็คือ Swing, api วันที่และเวลาใหม่ (JSR-310) และแพ็คเกจ J2SE อื่น ๆ



แพคเกจตัวเลือกคือการดำเนินการเปิดมาตรฐาน API (ตัวอย่างของการเลือกแพคเกจJavaServlet, Java3D) แพ็คเกจทางเลือกส่วนใหญ่มีการรูทในjavax.*เนมสเปซแม้ว่าอาจมีข้อยกเว้น
Lucky

คำตอบ:


212

ฉันคิดว่ามันเป็นสิ่งที่ประวัติศาสตร์ - ถ้าแพคเกจแนะนำว่านอกจาก JRE javaxที่มีอยู่ก็มาในฐานะ ถ้ามันครั้งแรกในฐานะส่วนหนึ่งของ JRE (เช่น NIO คือผมเชื่อว่า) javaแล้วก็มาในฐานะ ไม่แน่ใจว่าทำไมวันที่และเวลาใหม่ของ API จะจบลงด้วยjavaxเหตุผลดังต่อไปนี้แม้ว่า ... เว้นแต่ว่ามันจะมีแยกเป็นไลบรารีเพื่อทำงานกับเวอร์ชันก่อนหน้า (ซึ่งจะมีประโยชน์) หมายเหตุจากหลายปีต่อมา: จริง ๆ แล้วมันอยู่ที่javaหลังจากทั้งหมด

ฉันเชื่อว่ามีข้อ จำกัด เกี่ยวกับjavaแพ็คเกจ - ฉันคิดว่าตัวโหลดคลาสถูกตั้งค่าให้อนุญาตเฉพาะคลาสภายในเท่านั้นjava.*ที่จะโหลดจากrt.jarหรือคล้ายกัน (มีการเช็คอินอย่างแน่นอนClassLoader.preDefineClass)

แก้ไข: ในขณะที่คำอธิบายอย่างเป็นทางการ (การค้นหา orbfish แนะนำไม่ได้หนึ่งในหน้าแรกหรือดังนั้น) ไม่ต้องสงสัยเลยว่า "core" vs "นามสกุล" ฉันยังคงสงสัยว่าในหลายกรณีการตัดสินใจสำหรับแพคเกจใด ๆ มี เหตุผลทางประวัติศาสตร์ที่อยู่เบื้องหลังมันเกินไป java.beansนั่นคือ"คอร์" ของ Java จริงๆหรือ?


7
เพราะมันง่ายกว่าสำหรับผู้อ่านที่จะกด alt-t แล้วพิมพ์มันง่ายกว่าการตัดและวางโดยใช้ iPad? ;) คุณขวา แต่ผมคิดว่าฉันหมายถึงdownload.oracle.com/javase/tutorial/ext/index.html ไม่มีความผิด BTW ฉันมักจะพบคำตอบของคุณมีประโยชน์ฉันแค่ประหลาดใจที่ได้รับการยอมรับ
orbfish

1
คำว่า "javax" ไม่ปรากฏที่ใดก็ได้ในลิงก์ที่แนะนำไว้ก่อนหน้านี้ในชุดความคิดเห็นนี้
แผ่นพับ

API วันที่และเวลาใหม่จะสิ้นสุดลงตามjava.timeจริง
Michael Piefel

234

เดิมทีjavaxมีวัตถุประสงค์เพื่อเป็นส่วนขยายและบางครั้งสิ่งต่าง ๆ จะได้รับการเลื่อนออกjavaxไปเป็นจาวา

ปัญหาหนึ่งคือ Netscape (และอาจเป็น IE) การ จำกัด คลาสที่อาจอยู่ในแพ็คเกจ Java

เมื่อ Swing ถูกตั้งค่าเป็น "บัณฑิต" ไปjavaจากjavaxนั้นมีการระเบิดขนาดเล็กเพราะผู้คนตระหนักว่าพวกเขาจะต้องปรับเปลี่ยนการนำเข้าทั้งหมดของพวกเขา เนื่องจากความเข้ากันได้ย้อนหลังเป็นหนึ่งในเป้าหมายหลักของ Java ที่พวกเขาเปลี่ยนใจ

ณ เวลานั้นอย่างน้อยสำหรับชุมชน (อาจจะไม่ใช่ซัน) จุดทั้งหมดของjavaxก็หายไป ดังนั้นตอนนี้เรามีบางสิ่งใน javax ที่น่าจะเป็นjava... แต่นอกเหนือจากคนที่เลือกชื่อแพ็กเกจที่ฉันไม่รู้ว่าใครสามารถคิดได้ว่าเหตุผลเป็นอย่างไรในแต่ละกรณี


12
"เมื่อ Swing ถูกตั้งค่าเป็น" บัณฑิต "ถึง java จาก javax มีการระเบิดขนาดเล็กเพราะผู้คนตระหนักว่าพวกเขาจะต้องแก้ไขการนำเข้าทั้งหมดของพวกเขา" ผู้คนกำลังบ่นเกี่ยวกับสิ่งที่สามารถทำได้ด้วย regex ซึ่งเป็นผลมาจากพวกเขาโดยใช้รหัสคุณภาพ preproduciton?
เลื่อน

10
ได้. ฉันเขียนเครื่องมือใน Visual Cafe เพื่อแปลงระหว่างสอง (javax และ java) ก่อนที่ Sun จะตัดสินใจเก็บไว้ในแพ็คเกจ javax
TofuBeer

51

javaแพ็คเกจเป็นฐานและjavaxแพคเกจเป็นส่วนเสริม

Swing เป็นส่วนเสริมเนื่องจาก AWT เป็น UI API ดั้งเดิม Swing มาหลังจากนั้นในเวอร์ชัน 1.1


การแกว่งไม่ได้เป็นส่วนหนึ่งของ 1.1 มีเวอร์ชันของ Swing ที่รันบน 1.1 เป็นไลบรารี
Tom Hawtin - tackline

มีกุญแจ - "ไลบรารี่" ไม่ใช่ส่วนหนึ่งของ JDK ฉันมีรุ่นที่ผิดหรือเปล่า? javadocs ของฉันแนะนำว่า JButton นับตั้งแต่ 1.3 ดังนั้นบางทีความทรงจำของฉันก็ล้มเหลว
duffymo

1
เหตุใด API วันที่และเวลาใหม่ใน javax .. วันที่และเวลาจึงไม่ใช่ "ฐาน"?
Pacerier

1
"... วันที่และเวลาใหม่ api (JSR-310) ... " - มีคนใน Oracle / Sun ตัดสินใจว่าเป็น javax ที่ดีกว่าเพราะเป็นส่วนขยายที่ใหม่กว่าของไลบรารีหลัก หากคุณไม่เห็นด้วยควรนำติดตัวไปด้วย
duffymo

เพื่อการอ้างอิงเท่านั้น: พวกเขายกเลิกการตัดสินใจนั้นและวาง JSR-310 ไว้ที่java.time: docs.oracle.com/javase/8/docs/api/java/time/ ......
Mark Rotteveel

37

namespace ที่ javax คือมัก (ซึ่งเป็นคำที่โหลด) ที่ใช้สำหรับส่วนขยายมาตรฐานปัจจุบันเป็นที่รู้จักเลือกแพคเกจ ส่วนขยายมาตรฐานเป็นส่วนย่อยของ API ที่ไม่ใช่ธุรกิจหลัก ส่วนอื่น ๆ ของ API ที่ไม่ใช่คอร์นั้นเรียกว่าส่วนขยายที่ไม่ได้มาตรฐานซึ่งครอบครองเนมสเปซเช่น com.sun. * หรือ com.ibm . API ของแกนรับจาวา namespace

ไม่ใช่ทุกอย่างในโลก Java API ที่เริ่มต้นจากในแกนกลางซึ่งเป็นสาเหตุที่ส่วนขยายมักเกิดจากคำขอ JSR ในที่สุดพวกเขาก็ได้รับการเลื่อนตำแหน่งเป็นแกนกลางโดยยึดตาม 'คำแนะนำที่ฉลาด'

ความสนใจในระบบการตั้งชื่อนี้มาจากเทรนด์แบบ faux ในส่วนของ Sun - ส่วนต่อขยายอาจได้รับการเลื่อนระดับเป็นแกนหลักเช่นย้ายจาก javax. * ไปยัง java. * ทำลายสัญญาความเข้ากันได้แบบย้อนหลัง โปรแกรมเมอร์ร้องไห้คร่ำครวญและรู้สึกดีขึ้น นี่คือเหตุผลที่ Swing API แม้ว่าส่วนหนึ่งของแกนจะยังคงอยู่ใน javax. * namespace และนั่นก็เป็นวิธีที่แพ็คเกจได้รับการเลื่อนตำแหน่งจากส่วนขยายไปยังแกนหลัก - พวกมันถูกทำให้พร้อมสำหรับการดาวน์โหลดซึ่งเป็นส่วนหนึ่งของ JDK และ JRE


2

Javax เคยเป็นส่วนเสริมเท่านั้น หลังจากนั้นดวงอาทิตย์ก็ได้เพิ่มมันเข้าไปใน libary java ซึ่งลืมที่จะลบ x นักพัฒนาเริ่มสร้างรหัสด้วย javax ในเวลาต่อมาซันตัดสินใจเปลี่ยนเป็นจาวา นักพัฒนาซอฟต์แวร์ไม่ชอบแนวคิดนี้เพราะรหัสจะถูกทำลาย ... ดังนั้น javax จึงถูกเก็บไว้


1

java. * packages เป็นแพ็คเกจภาษาจาวาหลักซึ่งหมายความว่าโปรแกรมเมอร์ที่ใช้ภาษาจาวาต้องใช้มันเพื่อที่จะใช้งานจาวาได้อย่างคุ้มค่า

แพคเกจ javax. * เป็นแพ็คเกจเสริมซึ่งให้วิธีมาตรฐานที่ปรับขนาดได้เพื่อให้ API ที่กำหนดเองพร้อมใช้งานสำหรับแอปพลิเคชันทั้งหมดที่ทำงานบนแพลตฟอร์ม Java


0

แพคเกจบางอย่างเช่นjavax.swingไม่รวมอยู่ในห้องสมุดมาตรฐานจาวาที่แรก บริษัท ซันตัดสินใจที่จะพิจารณาพวกเขาอย่างเป็นทางการและรวมพวกเขาไว้ในจาวารุ่นแรก ๆ ว่าเป็นไลบรารีมาตรฐานหรือส่วนขยายมาตรฐาน

โดยการประชุมทั้งหมดนามสกุลมาตรฐานเริ่มต้นด้วยในขณะที่พวกเขาจะได้รับการเลื่อนตำแหน่งให้เป็นชั้นแรกเมื่อเวลาผ่านไปเหมือนสิ่งที่เกิดขึ้นXjavax.swing

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.