javax vs java пакет


385

В чем смысл пакета javax? Что входит в Java, а что в Javax?

Я знаю, что много корпоративных пакетов находятся в javax, но так же как и Swing, новый API даты и времени (JSR-310) и другие пакеты J2SE.



А Опциональный пакет представляет собой реализацию открытого, стандартного API (примеры дополнительных пакетов JavaServlet, Java3D). Большинство необязательных пакетов имеют корни в javax.*пространстве имен, хотя могут быть и исключения.
Счастливое

Ответы:


212

Я думаю, что это историческая вещь - если пакет вводится как дополнение к существующей JRE, он приходит как javax. Если он впервые был представлен как часть JRE (как, я полагаю, был NIO), то он выглядит как java. Не уверен, почему новый API даты и времени будет в конечном итоге javaxследовать этой логике, хотя ... если только он не будет доступен отдельно как библиотека для работы с более ранними версиями (что было бы полезно). Заметка от многих лет спустя: на самом деле все закончилось java.

Я полагаю, что существуют ограничения на javaпакет - я думаю, что загрузчики классов настроены так, что они позволяют загружать только классы внутри или что-то подобное. (Там, безусловно, регистрация .)java.*rt.jarClassLoader.preDefineClass

РЕДАКТИРОВАТЬ: Хотя официальное объяснение (предложенный поисковый шар не дал ни одного на первой странице или около того) не вызывает сомнений в отношении «ядро» против «расширение», я все еще подозреваю, что во многих случаях решение для любого конкретного пакета имеет историческая причина этого тоже. java.beansНапример, действительно ли это «ядро» Java?


7
Потому что читателю легче нажать alt-t и набрать его, чем мне вырезать и вставить с помощью iPad? ;). Вы правы, хотя, я думаю, я имел в виду download.oracle.com/javase/tutorial/ext/index.html . Без обид. Кстати, я обычно нахожу ваши ответы полезными. Я просто удивлен, что этот ответ был принят.
orbfish

1
Термин «javax» не встречается нигде в ссылке, предложенной ранее в этой ветке комментариев.
брошюра

Новый API даты и времени фактически закончился как в java.timeконце концов.
Майкл Пифель

234

Первоначально javaxбыло предназначено для расширений, а иногда вещи будут продвигаться из javaxJava.

Одной из проблем было Netscape (и, возможно, IE), ограничивающее классы, которые могут быть в пакете java.

Когда свинг был установлен в положение «выпускник» , чтобы javaот javaxбыл своего рода мини-удар, потому что люди поняли , что они должны изменить все их импорта. Учитывая, что обратная совместимость является одной из основных целей Java, они передумали.

В тот момент, по крайней мере, для сообщества (возможно, не для Sun) весь смысл javaxбыл потерян. Так что теперь у нас есть некоторые вещи в javax, которые, вероятно, должны быть в java... но кроме людей, которые выбрали имена пакетов, я не знаю, сможет ли кто-нибудь выяснить, каково обоснование для каждого конкретного случая.


12
«Когда Swing был настроен на« переход »на java из javax, это было своего рода мини-взрывом, потому что люди понимали, что им придется затем изменить весь свой импорт». Люди жаловались на что-то, что могло быть достигнуто с помощью регулярного выражения, которое было результатом того, что они использовали предварительный код качества?
сани

10
Ага. Я написал инструмент в Visual Cafe для преобразования между ними (javax и java) до того, как Sun решила оставить его в пакете javax.
TofuBeer

51

javaпакеты являются базовыми , а javaxпакеты являются расширениями.

Swing был расширением, потому что AWT был оригинальным интерфейсом API. Swing появился позже, в версии 1.1.


Качели не были частью 1.1. Была версия Swing, которая работала на 1.1 как библиотека.
Том Хотин - 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/…
Марк Роттвил

37

Пространство имен javax обычно (это загруженное слово) используется для стандартных расширений, в настоящее время известных как дополнительные пакеты . Стандартные расширения являются подмножеством неосновных API; другой сегмент неосновных API, очевидно, называется нестандартными расширениями, занимая пространства имен, такие как com.sun. * или com.ibm. , Основные API занимают Java. Пространство имен.

Не все в мире Java API начинается с ядра, поэтому расширения обычно рождаются из запросов JSR. В конечном итоге они получают звание основанного на «мудром совете».

Интерес к этой номенклатуре был вызван ошибкой со стороны Sun - расширения могли быть переведены в ядро, то есть перенесены из javax. * В java. * Нарушая обещание обратной совместимости. Программисты хрипло закричали, и здравый смысл возобладал. Вот почему Swing API, хотя и является частью ядра, продолжает оставаться в пространстве имен javax. *. И это также, как пакеты продвигаются от расширений к ядру - они просто становятся доступными для загрузки как часть JDK и JRE.


2

Javax раньше был только для расширений. Еще позже Sun добавила его в Java-библиотеку, забыв удалить x. Разработчики начали создавать код с помощью javax. Но позже солнце приняло решение изменить его на Java. Разработчикам не понравилась идея, потому что их код был бы разрушен ... так что javax был сохранен.


1

Пакеты java. * являются основными языковыми пакетами Java, а это означает, что программисты, использующие язык Java, должны использовать их для того, чтобы использовать язык java.

Пакеты javax. * - это необязательные пакеты, которые предоставляют стандартный масштабируемый способ сделать пользовательские API доступными для всех приложений, работающих на платформе Java.


0

Некоторые пакеты вроде javax.swingне были включены в стандартную библиотеку Java на первых порах. Компания Sun решила считать их официальными и включила их в ранние версии java как стандартные библиотеки или стандартные расширения.

По соглашению, все стандартные расширения начинаются с того времени, Xкогда их можно превратить в первоклассное со временем, как это было в случае с javax.swing.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.