Pular para o conteúdo principal

Java - Import

Esse assunto tem muito a ver com a organização do projeto. Primeiro, imagine que duas classes estão no mesmo pacote, naturalmente elas se conhecem e se enxergam, podendo assim se acessarem.

Exemplo:

Temos dois arquivos Java: o primeiro chamado ClassOne e o segundo ClassTwo.

package com.meuprojeto.model;

class ClassOne {

      String attributeOne; 
      String attributeTwo;
      String attributeThree;
      //..
}


package com.meuprojeto.model;

class ClassTwo {

      String attributeOne; 
      String attributeTwo;
      ClassOne classOne;
      //..
}


Essas classes estão no pacote model e por isso não há erro de compilação até aqui. Mas imagine um projeto com alguns pacotes, como o da imagem abaixo, o que fazer?



O primeiro passo é  tornar as classes públicas, adicionando a palavra reservada "public" antes de class.

Fica assim: 

package com.myproject.util;

public class ClassOne {

      String attributeOne; 
      String attributeTwo;
      String attributeThree;
      //..
}

O segundo é importar a classe referenciada, exemplo:

package com.myproject.model;

import com.meuprojeto.util.ClassOne;      //O import está aqui


public class ClassTwo {

      String attributeOne; 
      String attributeTwo;
      ClassOne classOne;
      //..
}

Pronto, referência feita.


A seguir algumas curiosidades:

Dá pra importar duas classes com o mesmo nome?

Sim, é possível. Porém, contudo, todavia é necessário que uma seja referenciada por seu Full Qualified Name, exemplo:



package com.myproject.util;

import java.util.Date;

public class ClassOne {

      String attributeOne; 
      String attributeTwo;
      String attributeThree;

     Date data1;
     java.sql.Date data2;   //Essa foi referenciada pelo Full Qualified Name

      //..
}


Também é possível importar todas as classes de um pacote:

import java.util.*;

Caso haja um import genérico (como o acima) e um específico como o abaixo, o Java sempre utiliza o import específico.

import java.util.Date;


Os pacotes são usados pela JVM para encontrar as classes do sistema dentro de uma estrutura de diretórios. Ao criar o pacote com.myproject.util a estrutura de diretórios deve ser  myproject/com/myproject/util. Pode-se falar que myproject e util são subpacotes de com/.

Existem algumas convenções para criar nomes de pacotes. Convenções não são obrigatórias, mas são consideradas boas práticas pois tem a intenção de facilitar o entendimento e organização dos projetos. São elas:

  • letras minúsculas;
  • começar com o site da empresa;
  • após o site deve vir o nome do projeto;
  • estrutura livre após o projeto;


Já vimos que é possível importar todas as classes de um pacote e duas classes de pacotes diferentes mas com o mesmo nome. Mas e se fizermos dois importes com * e nesses pacotes existirem classes com o mesmo nome?

Devemos usar o Full Qualified Name para especificar qual classe será usada no código.


Ponto importante: em Java não podemos importar o subpacote inteiro usando *. Ou seja, não é possível fazer isso:

import com.myproject.*;

é necessário importar todas os pacotes:

import com.myproject.util;
import com.myproject.model;
import com.myproject.service;


Também é impossível importar atributos e métodos estáticos com a palavra reservada static e o import. Exemplo:

package com.meuprojeto.util;

class ClassOne {

      String attributeOne; 
      String attributeTwo;
      String attributeThree;
      public static int X = 10;
      //..
}

package com.meuprojeto.model;

import com.myproject.util.*;

class ClassTwo {

      String attributeOne; 
      String attributeTwo;

      System.out.println(X);

      //..
}


Comentários

Postagens mais visitadas deste blog

Java - Estrutura de classe

Uma classe java simples deve possuir os items a seguir: Pacotes Os pacotes servem para organizar todas as classes que um sistema possui, é correto afirmar que toda classe pertence a um pacote. Caso não haja um pacote declarado a  classe faz parte do default package. Classe Neste item é onde se define atributos e comportamentos de um objeto no java. Sua declaração pode ser muito simples, algo como class Dog {} . (Os modificadores de acesso e notações merecem um post exclusivo :p ). Variáveis A declaração de variáveis deve conter o  seu tipo e seu nome . Existem alguns tipos de variáveis, que guardam conteúdo de maneira diferente, por exemplo algumas podem guardar valores durante a instância de um objeto, outras podem guardar valores compartilhados por todas as instâncias deste objeto ( static ) e também há a possibilidade de variáveis com espoco apenas durante a execução de um método. Métodos A declaração é um pouco diferente, contém o tipo ...