1. Pacotes
Programas Java comuns envolvem um número enorme de classes. Quantos? Milhares, dezenas de milhares. E se você também levar em conta o fato de que o programa usa várias bibliotecas contendo classes escritas por outros programadores, então o número de classes pode facilmente ser medido em milhões!
Seria praticamente impossível criar nomes únicos para todos esses milhões, ou mesmo apenas milhares, de classes.
Claro, podemos imaginar nomes como A123
e B345
, mas se estamos falando em escolher um bom nome de classe, um que facilite o entendimento da classe (como String
para strings, por exemplo), então mesmo gerar mil nomes únicos é muito de trabalho.
É por isso que em Java é comum agrupar classes em pacotes usando a palavra-chave package.
As classes Java e seus pacotes são muito semelhantes a arquivos e pastas em um computador.
Por exemplo, se você precisar armazenar 10 documentos em seu computador, provavelmente os manterá em uma pasta. Mas e se você tiver milhares de documentos (por exemplo, um repositório de todos os documentos de uma empresa)?
Com milhares de documentos a serem armazenados, uma solução é criar vários níveis de pastas com bons nomes descritivos. E então, em uma pasta no último nível, armazene os documentos relacionados a essa pasta específica. Bons nomes descritivos para os documentos também não atrapalham.
Na verdade, fazemos tudo isso para classes em Java.
Os arquivos contendo as classes são armazenados em diferentes diretórios (pastas), e o nome completo da pasta da classe com todas as suas subpastas é o nome do pacote. Exemplo:
Caminho para o arquivo | Nome do pacote | Nome da classe |
---|---|---|
|
|
|
|
|
|
|
|
|
Ao contrário dos nomes de pastas, os nomes de pacotes usam um ponto como delimitador. Em outras palavras, a pasta \com\codegym\tasks\
corresponde ao com.codegym.tasks
pacote.
2. src
pasta
Em Java, costuma-se armazenar todas as classes de um programa em uma única pasta (e subpastas). Essa pasta geralmente é chamada src
(abreviação de source ).
Essa pasta é chamada de raiz do projeto (ou raiz de origem ) e todos os caminhos de pacote são relativos a ela. Exemplos:
Pastas | Nome do pacote |
---|---|
|
|
|
|
Nessa situação, os programadores dizem algo como "temos um projeto chamado my
, que está localizado na c:\projects\data
pasta" ou "temos um projeto chamado project
, que está localizado na d:\files\git\data
pasta"
É melhor sempre colocar as classes em pacotes e não diretamente na pasta raiz ( src
. Se você tiver apenas algumas classes, isso não representa um problema. Mas quando há muitas classes, é muito fácil se confundir. Então , sempre crie suas classes apenas em packages.
Em Java, costuma-se dar nomes significativos a classes e pacotes. Muitas empresas lançam suas próprias bibliotecas (um conjunto de classes) e, para evitar confusão, incorporam o nome da empresa/site/projeto ao nome do pacote:
Nome do pacote | Nome da empresa/projeto |
---|---|
|
Projeto Apache |
|
empresa Oracle |
|
Empresa Oracle, projeto Java |
|
Empresa IBM, projeto WebSphere |
|
Projeto JBoss |
3. Conteúdo do arquivo
De acordo com o padrão da linguagem Java, informações sobre o nome de uma classe e o nome de seu pacote devem ser incluídas no arquivo com o código. A forma geral é mostrada abaixo:
package package-name;
public class ClassName
{
}
O nome do pacote deve corresponder ao nome da pasta e o nome do arquivo deve corresponder ao nome da classe pública.
Se você tiver um arquivo, ele deve conter isto:...\src\com\project\Service.java
package com.project;
public class Service
{
}
4. Importando classes
O nome da classe e o nome do pacote formam o que é chamado de nome totalmente qualificado da classe .
Exemplos:
Nome totalmente qualificado | Nome do pacote | Nome da classe |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
nenhum |
|
As boas notícias:
O nome de classe totalmente qualificado é sempre exclusivo em um projeto. Afinal, não dá para criar dois arquivos com o mesmo nome em uma única pasta.
As más notícias:
Nomes de classe totalmente qualificados são geralmente longos ou muito longos. E escrever um nome longo (por exemplo java.util.ArrayList) toda vez no código é super inconveniente.
É por isso que o Java adicionou a capacidade de importar classes .
Você pode usar o nome abreviado de uma classe em seu código, mas primeiro deve informar ao compilador qual nome de classe totalmente qualificado corresponde ao nome abreviado . E se você agora tiver várias classes com o mesmo nome em seu projeto? Ou você originalmente tem um, mas mais 15 foram adicionados...
Para usar um nome de classe curto em seu código, você precisa adicionar a seguinte construção:
import fully-qualified-class-name;
Essa declaração deve ser adicionada logo no início da aula, logo após a package
declaração.
Exemplo:
package com.codegym.tasks.task01;
import java.util.Scanner;
import com.test.helper.special.ArrayList;
public class Solution
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
ArrayList list = new ArrayList();
}
}
Importamos duas classes ( ejava.util.Scanner
) com.test.helper.special.ArrayList
, para que possamos usar seus nomes curtos em nosso código. E o compilador saberá quais classes usar.
E aqui está como o mesmo código ficaria se não tivéssemos usado import
:
package com.codegym.tasks.task01;
public class Solution
{
public static void main(String[] args)
{
java.util.Scanner console = new java.util.Scanner(System.in);
com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
}
}
A propósito, se seu projeto tiver duas classes chamadas Scanner
, você não poderá importar as duas para o mesmo arquivo: terá que usar o nome longo para uma delas.
Digamos que você tenha uma Jen em sua equipe. Não há problemas de comunicação, pois todos sabem quem ela é. Mas se houvesse três Jens, nomes totalmente qualificados teriam que ser usados para distingui-los.
A propósito, se você estiver com preguiça de adicionar muitas declarações de importação à sua classe, poderá usar sua versão preguiçosa: em vez de um nome de classe específico, coloque um asterisco:
import package-name.*;
Isso permitirá que você use os nomes curtos de todas as classes no pacote.
Todas as classes do java.lang
pacote são importadas automaticamente, então você não precisa escrever uma import
instrução para elas. Com certeza você já conhece uma dessas aulas: java.lang.String
. Sim está certo. Esta é a String
classe que usamos para trabalhar com strings.
GO TO FULL VERSION