Entendendo declarações de pacote e importações
Java vem com milhares de classes internas, e existem inúmeras outras de desenvolvedores
como você. Com todas essas classes, o Java precisa de uma maneira de organizá-las. Ele lida com isso de uma maneira semelhante a um gabinete de arquivo. Você coloca todos os seus pedaços de papel em pastas. Java coloca as classes em pacotes. Estes são agrupamentos lógicos para classes. Não colocamos você em frente a um gabinete de arquivo e pedimos que você encontre um documento específico. Em vez disso, informamos a você qual pasta procurar. O Java funciona da mesma maneira. Precisa que você conte que pacotes ele deve olhar para encontrar o código. Suponha que você tente compilar este código:
public class ImportExample {
public static void main(String[] args) {
Random r = new Random(); // DOES NOT COMPILE
System.out.println(r.nextInt(10));
}
}
O compilador Java fornece um erro semelhante a este:
Random cannot be resolved to a type
Esse erro pode significar que você digitou um erro no nome da classe. Você confere e descubra que você não fez. A outra causa desse erro é omitir um estado de importação declarada. As instruções de importação informam ao Java quais pacotes devem procurar nas classes. Desde que você não contou ao Java, onde procurar Random, ele não tem idéia.
Tentando isso novamente com a importação permite que você compile:
import java.util.Random; // import tells us where to find Random
public class ImportExample {
public static void main(String[] args) {
Random r = new Random();
System.out.println(r.nextInt(10)); // print a number between 0 and 9
}
}
Agora o código é executado; ele imprime um número aleatório entre 0 e 9. Assim como matrizes, Java gosta de começar a contar com 0.
Classes Java são agrupadas em pacotes. A declaração de importação diz ao compilador qual pacote para procurar uma classe. Isso é semelhante ao modo como uma carta é enviada.
Imagine que você está enviando uma carta para o endereço 123 Main St., Apartment 9. O carteiro primeiro traz a carta para 123 Main St. Então ela procura a caixa de correio para o apartamento número 9. O endereço é como o nome do pacote em Java. O número do apartamento é como o nome da classe em Java. Assim como o carteiro só olha para os números dos apartamentos no prédio, Java apenas procura nomes de classes no pacote.
Nomes de pacotes são hierárquicos como o correio também. O serviço postal começa com o nível superior, olhando primeiro para o seu país. Você começa a ler um nome de pacote no início também. Se começar com java ou javax, isso significa que veio com o JDK. Se começar com outra coisa, provavelmente mostra de onde veio usando o nome do site ao contrário. Por exemplo, com.amazon.java8book informa que o código veio da amazon.com. Depois do nome do web-site, você pode adicionar o que quiser. Por exemplo, com.amazon.java8.my.name também veio da amazon.com. Java chama pacotes child de pacotes mais detalhados. com.amazon.java8book é um pacote child de com.amazon. Você pode dizer porque é mais longo e, portanto, mais específico.
Você verá os nomes dos pacotes no exame que não seguem esta convenção. Não fique surpreso ao ver nomes de pacotes como a.b.c. A regra para nomes de pacotes é que eles são principalmente letras ou números separados por pontos. Tecnicamente, você tem permissão para alguns outros caracteres entre os pontos. As regras são as mesmas que para nomes de variáveis, que você verá mais tarde no capítulo. O exame pode tentar enganar você com nomes de variáveis inválidos. Felizmente, não tenta enganar você, dando nomes de pacotes inválidos.
Nas seções a seguir, veremos as importações com wildcards, nomeando as combinações com importações, como criar um pacote próprio e como o exame formata o código.