Importação Redundantes
Se temos que importar os pacotes toda vez que utilizamos uma classe. Então, por que para utilizar a classe System não precisamos fazer o importe?
Isso acontece porque há um pacote no Java que é importado automaticamente, esse pacote é o java.lang. Você pode até importar esse pacote, mas não precisa, isso seria redundante.
1 2 3 4 5 6 7 8 9 10 11 |
import java.lang.System; import java.lang.*; import java.util.Random; import java.util.*; public class MyClass { public static void main(String args[]) { Random r = new Random(); System.out.println(r.nextInt(10)); } } |
As importação de java.lang são redundantes porque o pacote lang já é importado automaticamente pelo Java. A importação do Random também é redundante porque a importação com o util.* já traz a classe Random.
No exame pode ser que apareçam códigos que você precise saber de onde importá-los. Qual pacote deve ser importado para o código compilar?
1 2 3 4 5 |
public cass InputImports { public void read(Files files){ Paths.get("name"); } } |
Há duas maneiras.
import java.nio.file.*;
ou
import java.nio.files.Files;
import java.nio.file.Paths;
Algumas importações que não funcionam.
import java.nio.*; essa importação não importa subpacotes, no caso eu quero o file.Files.
import java.nio.*.*; só pode utilizar um asterístico e deve estar no fim.
import java.nio.file.Paths.*; a importação só serve para classes, não importa métodos.
Conflitos com Nomes
Classes e pacotes não precisam ter nomes únicos. Isso significa, que uma classe pode estar em vários pacotes. Um exemplo é a classe Date. O Java fornece a implementação java.util.Date e java.sql.Date. Qual importe devo fazer para o código a seguir?
1 2 3 4 |
public class Conflicts { Date date; //mais códigos omitidos } |
Para esse caso pode ser fácil, sem contexto não dá para saber, mas pode-se fazer o import coringa (wildcard).
import java.util.*;
import java.sql.*; // se importar as duas dessa maneira o código não compila
Quando a classe com o mesmo nome é encontrada em vários pacotes, o Java vai lançar um erro de compilação. No exemplo dado, basta remover o import java.sql.*. Mas, e se precisarmos de alguma classe do pacote java.sql?
import java.util.Date;
import java.sql.*;
Agora sim. Simplesmente importei somente a classe que era necessária no pacote util e no pacote sql utilizei a importação coringa (wildcard). Posso importar somente as duas classes Date dessa maneira?
import java.util.Date;
import java.sql.Date;
Aqui vamos ter um problema, porque ao vincular uma variável ao Date, o Java não vai saber qual é o Date padrão para assumir tipo da variável. Dessa maneira ao criar uma variável, vamos ter que dizer a qual Date estamos associando a variável.
1 2 3 4 |
public class Conflicts { java.util.Date date; java.sql.Date sqlDate; } |
Criando um Novo Pacote
Até agora os exemplos só utilizaram o pacote padrão. Contudo pode aparecer no exame algum exemplo que tenha mais pacotes. Quando o Java executa o programa ele sabe que ambos os pacotes tem ligação.
1 2 3 4 5 6 7 8 9 10 11 |
package packagea; public class ClassA{} package packageb; import packagea.ClassA; public class ClassB { public static void main(String[] args){ ClassA a; System.out.println("OK"); } } |
Deixe um comentário