Um pacote opcional é uma implementação, uma API padrão aberto (exemplos de pacotes opcionais JavaServlet, Java3D). A maioria dos pacotes opcionais está enraizada no javax.*espaço para nome, embora possa haver exceções.
Sorte
Respostas:
212
Eu acho que é uma coisa histórica - se um pacote é introduzido como uma adição a um JRE existente, ele entra como javax. Se ele é introduzido pela primeira vez como parte de um JRE (como o NIO, acredito), ele entra como java. No javaxentanto, não sei por que a nova API de data e hora acabará seguindo esta lógica ... a menos que também esteja disponível separadamente como uma biblioteca para trabalhar com versões anteriores (o que seria útil). Nota de muitos anos depois: afinal, ele acabou sendo javaexibido.
Eu acredito que há restrições no javapacote - acho que os carregadores de classe estão configurados para permitir apenas ojava.* carregamento de classes dentro rt.jarou algo semelhante. (Certamente há um check-in ClassLoader.preDefineClass.)
EDIT: Embora uma explicação oficial (a pesquisa por orbfish sugerida não produza uma na primeira página) seja sem dúvida sobre "core" vs "extension", eu ainda suspeito que, em muitos casos, a decisão de qualquer pacote específico tenha uma razão histórica por trás disso também. É java.beansrealmente esse "núcleo" para Java, por exemplo?
Porque é mais fácil para um leitor pressionar alt-te digitar do que cortar e colar usando o iPad? ;). Você está certo, porém, acho que quis dizer download.oracle.com/javase/tutorial/ext/index.html . Sem ofensas, BTW Normalmente, acho suas respostas úteis. Estou surpreso que este foi aceito.
orbfish
11
O termo "javax" não aparece em nenhum lugar do link sugerido anteriormente neste tópico de comentários.
panfleto
A nova API de data e hora realmente acabou como java.timeafinal.
Michael Piefel
234
Originalmente javaxse destinava a extensões, e às vezes as coisas eram promovidas para o javaxjava.
Um problema foi o Netscape (e provavelmente o IE) limitando as classes que poderiam estar no pacote java.
Quando o Swing foi definido como "graduado", a javapartir javaxdaí houve uma espécie de mini-explosão, porque as pessoas perceberam que precisariam modificar todas as suas importações. Dado que a compatibilidade com versões anteriores é um dos principais objetivos do Java, eles mudaram de idéia.
Naquele momento, pelo menos para a comunidade (talvez não para a Sun) todo o ponto javaxestava perdido. Portanto, agora temos algumas coisas em javax que provavelmente deveriam estar java... mas, além das pessoas que escolheram os nomes dos pacotes, não sei se alguém pode descobrir qual é a lógica caso a caso.
"Quando o Swing foi definido como" graduado "para javax a partir do javax, houve uma espécie de mini-explosão porque as pessoas perceberam que teriam que modificar todas as suas importações". As pessoas estavam reclamando de algo que poderia ser realizado com um regex que resultou do uso do código de qualidade pré-produção?
Sled
10
Sim. Eu escrevi uma ferramenta no Visual Cafe para converter entre os dois (javax e java) antes que a Sun decidisse mantê-la no pacote javax.
TofuBeer
51
javapacotes são base e javaxpacotes são extensões.
O swing era uma extensão porque o AWT era a API da interface do usuário original. Swing veio depois, na versão 1.1.
Swing não fazia parte do 1.1. Havia uma versão do Swing que rodava na 1.1 como uma biblioteca.
Tom Hawtin # tackline
Existe a chave - "biblioteca", não parte do JDK. Eu tenho a versão errada? Meus javadocs sugerem que o JButton existe desde a versão 1.3, então talvez minha memória tenha me falhado.
duffymo
11
Então, por que a nova API de data e hora em javax .. data e hora não é "base"?
Pacerier 18/10/11
11
"... a nova API de data e hora (JSR-310) ..." - alguém da Oracle / Sun decidiu que era melhor colocar o javax, porque é uma extensão mais recente das bibliotecas principais. Se você não concorda, é melhor levá-lo com eles.
O namespace javax é geralmente (que é uma palavra carregada) usado para extensões padrão, atualmente conhecidas como pacotes opcionais . As extensões padrão são um subconjunto das APIs não principais; o outro segmento das APIs não principais obviamente chamava extensões não padrão, ocupando os espaços de nome como com.sun. * ou com.ibm. . As principais APIs utilizam o java. namespace.
Nem tudo no mundo da API Java começa no núcleo, e é por isso que as extensões geralmente nascem das solicitações JSR. Eles acabam sendo promovidos ao núcleo com base em 'conselhos sábios'.
O interesse nessa nomenclatura surgiu de um falso passo da parte da Sun - extensões poderiam ter sido promovidas para o núcleo, ou seja, movidas de javax. * Para java. * Quebrando a promessa de compatibilidade com versões anteriores. Os programadores choraram roucamente, e o melhor senso prevaleceu. É por isso que a API Swing, embora faça parte do núcleo, continua a permanecer no espaço para nome javax. *. E é assim também que os pacotes são promovidos das extensões ao núcleo - eles são simplesmente disponibilizados para download como parte do JDK e JRE.
Javax costumava ser apenas para extensões. Mais tarde, a Sun a adicionou à biblioteca java, esquecendo de remover o x. Os desenvolvedores começaram a criar código com javax. Mais tarde, os sóis decidiram alterá-lo para java. Os desenvolvedores não gostaram da ideia porque seu código seria arruinado ... então o javax foi mantido.
Os pacotes java. * são os principais pacotes da linguagem Java, o que significa que os programadores que usam a linguagem Java precisavam usá-los para fazer qualquer uso interessante da linguagem java.
Pacotes javax. * são pacotes opcionais, que fornecem uma maneira escalável e padrão de disponibilizar APIs personalizadas para todos os aplicativos em execução na plataforma Java.
Alguns pacotes, como javax.swingnão foram incluídos na biblioteca padrão java no início. A empresa Sun decidiu considerá-los oficiais e incluiu-os nas versões iniciais do java como bibliotecas padrão ou extensões padrão.
Por convenção, todas as extensões padrão começam com um Xtempo em que podem ser promovidas para a primeira classe ao longo do tempo, como aconteceu javax.swing.
java.time
agora download.java.net/jdk8/docs/api/java/time/package-summary.htmlJavaServlet
,Java3D
). A maioria dos pacotes opcionais está enraizada nojavax.*
espaço para nome, embora possa haver exceções.Respostas:
Eu acho que é uma coisa histórica - se um pacote é introduzido como uma adição a um JRE existente, ele entra como
javax
. Se ele é introduzido pela primeira vez como parte de um JRE (como o NIO, acredito), ele entra comojava
. Nojavax
entanto, não sei por que a nova API de data e hora acabará seguindo esta lógica ... a menos que também esteja disponível separadamente como uma biblioteca para trabalhar com versões anteriores (o que seria útil). Nota de muitos anos depois: afinal, ele acabou sendojava
exibido.Eu acredito que há restrições no
java
pacote - acho que os carregadores de classe estão configurados para permitir apenas ojava.*
carregamento de classes dentrort.jar
ou algo semelhante. (Certamente há um check-inClassLoader.preDefineClass
.)EDIT: Embora uma explicação oficial (a pesquisa por orbfish sugerida não produza uma na primeira página) seja sem dúvida sobre "core" vs "extension", eu ainda suspeito que, em muitos casos, a decisão de qualquer pacote específico tenha uma razão histórica por trás disso também. É
java.beans
realmente esse "núcleo" para Java, por exemplo?fonte
java.time
afinal.Originalmente
javax
se destinava a extensões, e às vezes as coisas eram promovidas para ojavax
java.Um problema foi o Netscape (e provavelmente o IE) limitando as classes que poderiam estar no pacote java.
Quando o Swing foi definido como "graduado", a
java
partirjavax
daí houve uma espécie de mini-explosão, porque as pessoas perceberam que precisariam modificar todas as suas importações. Dado que a compatibilidade com versões anteriores é um dos principais objetivos do Java, eles mudaram de idéia.Naquele momento, pelo menos para a comunidade (talvez não para a Sun) todo o ponto
javax
estava perdido. Portanto, agora temos algumas coisas em javax que provavelmente deveriam estarjava
... mas, além das pessoas que escolheram os nomes dos pacotes, não sei se alguém pode descobrir qual é a lógica caso a caso.fonte
java
pacotes são base ejavax
pacotes são extensões.O swing era uma extensão porque o AWT era a API da interface do usuário original. Swing veio depois, na versão 1.1.
fonte
java.time
: docs.oracle.com/javase/8/docs/api/java/time/…O namespace javax é geralmente (que é uma palavra carregada) usado para extensões padrão, atualmente conhecidas como pacotes opcionais . As extensões padrão são um subconjunto das APIs não principais; o outro segmento das APIs não principais obviamente chamava extensões não padrão, ocupando os espaços de nome como com.sun. * ou com.ibm. . As principais APIs utilizam o java. namespace.
Nem tudo no mundo da API Java começa no núcleo, e é por isso que as extensões geralmente nascem das solicitações JSR. Eles acabam sendo promovidos ao núcleo com base em 'conselhos sábios'.
O interesse nessa nomenclatura surgiu de um falso passo da parte da Sun - extensões poderiam ter sido promovidas para o núcleo, ou seja, movidas de javax. * Para java. * Quebrando a promessa de compatibilidade com versões anteriores. Os programadores choraram roucamente, e o melhor senso prevaleceu. É por isso que a API Swing, embora faça parte do núcleo, continua a permanecer no espaço para nome javax. *. E é assim também que os pacotes são promovidos das extensões ao núcleo - eles são simplesmente disponibilizados para download como parte do JDK e JRE.
fonte
Javax costumava ser apenas para extensões. Mais tarde, a Sun a adicionou à biblioteca java, esquecendo de remover o x. Os desenvolvedores começaram a criar código com javax. Mais tarde, os sóis decidiram alterá-lo para java. Os desenvolvedores não gostaram da ideia porque seu código seria arruinado ... então o javax foi mantido.
fonte
Os pacotes java. * são os principais pacotes da linguagem Java, o que significa que os programadores que usam a linguagem Java precisavam usá-los para fazer qualquer uso interessante da linguagem java.
Pacotes javax. * são pacotes opcionais, que fornecem uma maneira escalável e padrão de disponibilizar APIs personalizadas para todos os aplicativos em execução na plataforma Java.
fonte
Alguns pacotes, como
javax.swing
não foram incluídos na biblioteca padrão java no início. A empresa Sun decidiu considerá-los oficiais e incluiu-os nas versões iniciais do java como bibliotecas padrão ou extensões padrão.Por convenção, todas as extensões padrão começam com um
X
tempo em que podem ser promovidas para a primeira classe ao longo do tempo, como aconteceujavax.swing
.fonte