• Nenhum resultado encontrado

83Todos os direitos reservados a 3Way Networks

No documento Linguagem Java COMPLETA (páginas 83-85)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 73

A primeira forma importa especificamente a classe Gerente do pacote empresa.rh, enquanto que a seguinte, com o curinga, importa todas as classes do pacote empresa.rh.

Lembre-se, import deve ser colocado após a cláusula package e antes das definições de classe ou interface no arquivo de código fonte (ver seção 2.8). Refazendo o código,

package empresa.rh; import java.util.Date; public class Funcionario {

double salario;

Date dataContrato; //(1) String nome;

String cargo="indefinido"; public Funcionario(){}

public Funcionario(String nome,double salario,Date dataContrato) { //(2) this.salario = salario;

this.dataContrato = dataContrato; this.nome = nome;

}

void bonusSalario (double percentual) { salario *= 1 + percentual / 100; }

}

Listagem 7.20 – Importando pacotes

7.5.1.3 Localização de Classes e CLASSPATH

Antes que você possa executar sua aplicação a JVM precisa fazer o carregamento das classes (class loader). O class loader é um mecanismo usado para carregar classes a partir de arquivos nos diretórios ou arquivos compactados (zip ou jar), especificados na propriedade de sistema java.class.path. Esta propriedade é configurada quando a variável de ambiente CLASSPATH está definida. As classes são localizadas seqüencialmente através dos diretórios e arquivos jar (ou zip) que estejam especificados na propriedade java.class.path. A configuração padrão para propriedade java.class.path é o subdiretório jre/lib dentro do diretório onde

foi instalado o JDK( ou JRE).

Você pode usar java -verbose SuaClasse, para ver a seqüência da carga das classes, ao executar sua aplicação.

Quando surge o erro NoClassDefFoundError, significa que o JVM não conseguiu localizar sua classe ou alguma classe da qual ela depende. Você deve informar à JVM onde procurar pelos pacotes, definindo a variável CLASSPATH.

Tomando nosso pacote de exemplo, empresa.rh, e supondo que nosso pacote está sob o o diretório /opt/java/lib (ou c:\opt\java\lib) escrevemos:

export CLASSPATH=/opt/java/lib (para sistemas baseados em UNIX);

set CLASSPATH=c:\opt\java\lib(para Windows);

Como foi dito, seus pacotes podem estar dentro de arquivos compactados jar ou zip, neste caso devemos incluir o nome do arquivo com extensão:

export CLASSPATH=/opt/java/lib/aplicacao.jar

É possível definir a variável CLASSPATH com

mais de um local de pesquisa; basta separá- los por ponto-e-vírgula (no Windows) ou dois- pontos (nos sistemas

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores. Você também pode colocar seus pacotes ou arquivos jar no diretório JAVA_HOME/jre/lib/ext, este diretório é verificado antes da CLASSPATH na seqüência de carga das classes.

7.5.1.4 Importação Estática

Como vimos em capítulos anteriores membros estáticos são referenciados pelo nome da classe, assim antes de invocar um método ou utilizar um atributo devemos proceder como no exemplo (Listagem 7.21, linha 4 e 5):

class Calcula1 {

public static void main(String[] args) { double x = 10.0, y = 20.5;

double raizquadrada = Math.sqrt(x); double hipotenusa = Math.hypot(x, y); double area = Math.PI * y * y;

} }

Listagem 7.21 – Sem importação static

No Java 5.0 foi introduzido o static import, que importa métodos e atributos estáticos de qualquer classe (ou atributos da interface), além dos tipos enumerados, desde que não estejam em pacotes não nomeados, ou seja, default package.

Deste modo, você pode importar os métodos utilizados no exemplo anterior (Listagem 7.21, linha 4 e 5) e usá-los diretamente, sem utilizar o nome da classe ou interface para referenciá-los (Listagem 7.22, linha 5 e 6):

Importando todos os membros estáticos (Listagem 7.22, linha 1):

import static java.lang.Math.*;//curinga, qualquer membro estático class Calcula2 {

public static void main(String[] args) { double x = 10.0, y = 20.5;

double raizquadrada = sqrt(x); //membro estático double hipotenusa = hypot(x, y); //membro estático double area = PI * y * y;

} }

Listagem 7.22 – Usando static import

Você pode importar um membro estático específico (Listagem 7.23, linhas 1 e 2):

import static java.lang.Math.sqrt; // método estatico import static java.lang.Math.PI; // campo estático class Calculate3 {

public static void main(String[] args) { double x = 10.0, y = 20.5;

double raizquadrada = sqrt(x); //requer nome completo

double hipotenusa = Math.hypot(x, y); double area = PI * y * y;

} }

Listagem 7.23 – Usando static import específico

Apesar de poder importar todos os métodos e atributos estáticos da uma classe, a classe em si

não foi importada, se você tentar instanciar um

objeto sem o nome completamente qualificado da classe, com

operador new, o compilador não conseguiria localizá-la precisando de um import

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

85

No documento Linguagem Java COMPLETA (páginas 83-85)

Documentos relacionados