Onde fica a API?

Boa tarde,

Num programinha simples para exibir uma frase numa caixa de texto, começa com a seguinte linha:

import javax.swing.*;

Vi que esse javax.swing.* é uma API do Java… Minhas duvidas sao duas:

1-) Por que usar o asterisco? Ele substitiu o nome dos pacotes, como border, event, plaf, text???

2-) Bem, o comando import é pra importar né? Mas de onde vem esse javax.swing.*? Ele fica armazenado no computador quando instalamos o JDK? Ou ele (e outras APIs) precisa ser copiado para o computador?

Nao sei se deu pra entender as duvidas. Como sou iniciante, até formular as perguntas fica difícil…

Agradeço a ajuda…

Abraço a todos

Olá Syd.

Cara, me vi agora a um ano e pouco atrás, essas coisas me atormentavam. Mas vamos lá.

quando voce escreve

import javax.swing.*;

quer dizer que do pacote javax, vc quer apenas swing, e do swing, voce quer tudo. Entao, o * tem o significado que voce imaginava.

Por enquanto, todos o que voce precisa já vem quando vc instala o JDK. Todos os pacotes estão nele.

Depois de um certo tempo, vc vai sentir a necessidade de usar APIs externas. Digo, de outros distribuidores/desenvolvedores. Entao voce fará import para essas APIs, mas nao se preocupe com isso, uma coisa de cada vez.

Bom saber, é que voce faz vários imports para que sua aplicação rode apenas com os recursos que ela precisa. Entao, vc vai adicionando (fazendo import) recursos conforme desenvolve.

BOm, isso ajudou ou complicou mais?

[]s

Fala Vinicius…

Deu pra entender sim. Mas fiquei me perguntando:
Se eu fosse usar apenas o javax.swing.text e o javax.swing.plaf (só uma suposicao), compensaria importar APENAS esses dois, ou já colocar o asterisco e importar tudo?

Imagino que quanto mais se importa, mais pesado fica o programa… É isso mesmo? Se a resposta for sim, então eu teria que importar o minimo possivel para nao carregar demais.
É mais ou menos por aí?

Só uma observação importante sobre o , ele não substitui os nomes dos subpacotes, somente das classes, usar javax.swing. importa todas as classes que estão diretamente dentro de javax.swing, as classes que estão em javax.swing.border, javax.swing.event, etc, não serão importadas e você terá que colocar um import para elas tambem, ex.:

import javax.swing.*; import javax.swing.event.*;

As classes da API padrão do Java SE ficam em <PARA_JRE>/lib/rt.jar, mas você não precisa se preocupar com isso, só é interessante saber. Outras API’s você precisa adicionar as classes no classpath da JVM, e para isso há varias formas como o parâmetro -cp do java.exe, a variavel de ambiente CLASSPATH, etc.

[quote=“Syd”]Imagino que quanto mais se importa, mais pesado fica o programa… É isso mesmo? Se a resposta for sim, então eu teria que importar o minimo possivel para nao carregar demais.
É mais ou menos por aí?[/quote]
Não, não fica. Isso é apenas para evitar que você tenha que digitar o nome completo da classe.
Ao invés de digitar javax.swing.JOptionPane, você importa essa classe (ou o pacote) e escreve apenas JOptionPane.

Mesmo assim, o melhor a fazer é importar apenas as classes que você usa, por questões de clareza. Fica mais fácil descobrir quais são as classes usadas pela classe que você escreveu.

Ok, pessoal, consegui pegar o “porquê” da questão…

Valeu pela ajuda

Abraços