Vous êtes sur la page 1sur 37

Departamento de Engenharia Rural Centro de Cincias Agrrias

Programao II

Prof. Bruno Vilela Oliveira bruno@cca.ufes.br http://www.brunovilela.webnode.com.br

Aula 05
Conhea suas variveis

Conhea suas variveis


Existem dois tipos de variveis: primitivas e de referncia. At agora voc usou variveis em duas situaes: como estado de um objeto (variveis de instncia), e como variveis locais (variveis declaradas dentro de um mtodo). Posteriormente, usaremos variveis como argumentos (valores enviados para um mtodo pelo cdigo que o chamou), e como tipos de retorno (valores retornados ao cdigo que chamou o mtodo).

Conhea suas variveis


Voc viu variveis declaradas como valores inteiros primitivos simples (tipo int). Examinou variveis declaradas como algo mais complexo como o tipo String ou Array. Mas h mais coisas na vida alm de inteiros, strings e arrays. E se voc tiver um objeto DonoDeAnimal com uma varivel de instncia Dog? Ou um Carro com um Motor? Vamos desvendar os mistrios dos tipos da Java e examinaremos o que voc pode declarar como varivel, o que voc pode inserir em uma varivel e o que voc pode fazer com uma varivel. E finalmente veremos o que realmente acontece na pilha de lixo coletvel.

Declarando uma varivel


A Java considera o tipo importante. O compilador no permitir que voc faa algo bizarro e perigoso como inserir a referncia de uma girafa em uma varivel coelho o que aconteceria quando algum tentasse pedir ao suposto coelho para saltar()? E no permitir que insira um nmero de ponto flutuante em uma varivel do tipo inteiro, a menos que voc informe ao compilador que sabe que pode perder a preciso (o que se encontra aps a vrgula decimal). O compilador consegue identificar a maioria dos problemas:

Coelho saltador = new Girafa();


No espere que isso seja compilado. Ainda bem que no ser.

Declarando uma varivel


Para que toda essa segurana dos tipos funcione, voc deve declarar o tipo de sua varivel. Ela um inteiro? Um Co? Um nico caractere? As variveis vm em duas verses: primitivas e de referncia de objeto. As primitivas contm valores bsicos (pense em padres de bits simples) que incluem inteiros, booleanos e nmeros de ponto flutuante (valores reais). As referncias de objeto contm, bem, referncias a objetos.

Declarando uma varivel


Voc deve seguir duas regras de declarao:

As variveis devem ter um tipo


Alm de um tipo, uma varivel precisa de um nome, para que voc possa usar esse nome no cdigo.

As variveis devem ter um nome


int count;
tipo nome

Quando dissermos algo como um objeto de tipo X, pense em tipo e classe como sinnimos.

Declarando uma varivel


Gostaria de um ch duplo? No, traga um do tipo inteiro.
Quando pensar em variveis pense em xcaras, xcaras de ch, canecas grandes, onde cabe muita cerveja, copos enormes de pipoca vendidos nos cinemas, etc.

Uma varivel como um copo. Um continer. Ela contm algo.


Ela tem um tamanho e um tipo. Primeiramente examinaremos as variveis (usando uma analogia com os copos) que contm tipos primitivos e, em seguida, discutiremos as variveis que contm referncias a objetos.

Tipos primitivos
As variveis primitivas so como copos
Quando vamos a um local em que bebidas e outros alimentos so servidos em diferentes opes de tamanhos, podemos ordenar os copos no balco para decidir qual deles iremos querer (ou precisar).

pequeno

mdio

grande

gigante

Tipos primitivos
As variveis primitivas so como copos
E, em Java, existem tamanhos diferentes para as variveis primitivas e esses tamanhos tm nomes. Quando voc declarar uma varivel em Java, deve declar-la com um tipo especfico. Os quatro continers mostrados aqui so para os quatro tipos primitivos inteiros em Java.

Tipos primitivos
As variveis primitivas so como copos
Cada copo contm uma quantidade, o mesmo ocorrendo com as variveis primitivas da Java, de modo que, em vez de dizer quero um copo grande de caf francs torrado, voc diria ao compilador quero uma varivel int com o nmero 90, por favor. Exceto por uma pequena diferena... Em Java, voc tambm ter que fornecer um nome para seu copo. Portanto, na verdade diramos Quero um int, por favor, com o valor 341 e chame a varivel de pontos.

Tipos primitivos
As variveis primitivas so como copos
Cada varivel primitiva possui uma quantidade fixa de bits (tamanho do copo). Os tamanhos das seis variveis primitivas numricas em Java so mostrados a seguir:

Tipos primitivos
Tipos primitivos Java.
A seguir estes so listados com suas caractersticas resumidas: Tipo Nmero de bits Boolean e char
boolean char JVM especfico 16 bits

Faixa de valores
true ou false 0 a 65535

Tipos primitivos
Tipos primitivos Java.
Tipo Nmero de bits Faixa de valores Numricos (todos possuem sinal so positivos ou negativos) inteiros
byte short int long float double 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits -128 a 127 -32768 a 32767 -2147483648 a 2147483 -enorme at enorme varia varia

reais (ponto flutuante floating point)

Declaraes primitivas com atribuies


int x; x = 234; byte b = 89; boolean ehDivertido = true; double d = 3456.98; char c = 'f'; int z = x; booelan isPunkRock; isPunkRock = false; boolean powerOn; powerOn = ehDivertido; long big = 3456789; float f = 32.5f;

Observe o f. preciso inseri-lo em um valor do tipo float, porque o compilador Java considera tudo que encontra como ponto flutuante como um tipo double, a menos que f seja usado.

Tipos primitivos
Voc no vai querer derramar isto...
Certifique-se de que o valor cabe na varivel.
Voc no pode colocar um valor grande em um copo pequeno. Bem, na verdade voc pode, mas perder alguma coisa. Voc ter, como dizemos, um vazamento. O compilador tenta prevenir isso se ele puder perceber em seu cdigo que algo no vai caber no container (varivel/copo) que voc est usando. Por exemplo, voc no pode derramar um int completamente em um container do tamanho byte, como no exemplo abaixo: Int x = 24; byte b = x; //No funcionar!!

Tipos primitivos
Na lista abaixo, circule as linhas de instrues que seriam legais, caso elas estivessem no interior de um mtodo Java.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. int x = 34.5; boolean boo = x; int g = 17; int y = g; y = y + 10; short s; s = y; byte b = 3; byte v = b; short n = 12 v = n; byte k = 128;

Tipos primitivos
Regras para nomes de variveis (e outras coisas)
Devem comear com uma letra, trao baixo underscore (_) ou com um cifro ($). Voc no pode comear um nome com um nmero. Depois do primeiro caractere, voc pode usar nmeros. Apenas no inicie com um nmero O nome pode ser qualquer coisa que voc quiser, desde que atenda s regras acima e no seja uma das palavras reservadas da Java.

Nomes de variveis e palavras reservadas


Algumas palavras que voc nunca poder usar para dar nome s suas coisas em Java:
public, static, void Nomes dos tipos primitivos boolean, char, byte, short, int, long, float, double

Nomes de variveis e palavras reservadas


Algumas palavras que voc nunca poder usar para dar nome s suas coisas em Java:
boolean long final volatile case catch void byte short native if default finally const char public static else for try goto double private stricfp do break throw enum float protected synchronized while continue throws int abstract transient switch assert return

Controlando seu objeto Dog


Voc sabe como declarar uma varivel primitiva e atribuir a ela um valor. Mas e quanto s variveis no primitivas? Em outras palavras, e quanto aos objetos?
Na verdade no h uma varivel OBJETO. H apenas uma varivel de REFERNCIA de objeto. Uma varivel de referncia de objeto contm bits que representam uma maneira de acessar um objeto. Ela no contm o objeto propriamente dito, mas algo como um ponteiro. Ou um endereo. Em Java, no sabemos realmente o que se encontra dentro de uma varivel de referncia. Sabemos que, o que quer que seja, representar um e somente um objeto. E a JVM sabe como usar a referncia para chegar ao objeto.

Controlando seu objeto Dog


Voc no pode inserir um objeto em uma varivel. Geralmente consideramos isso dessa forma... Dizemos coisa como passei a string para o mtodo System.out.println(). Ou o mtodo retorna um objeto Dog ou ainda inseri um novo objeto Foo na varivel chamada myFoo. Mas no isso que acontece. No existem copos gigantes expansveis que possam crescer at o tamanho de qualquer objeto. Os objetos residem em um e apenas um local a pilha de lixo coletfel (o Heap)! Enquanto uma varivel primitiva fica cheia de bits que representam o valor real da varivel, uma varivel de referncia de objeto fica cheia de bits que representam uma maneira de chegar ao objeto.

Controlando seu objeto Dog


Voc usar o operador ponto (.) em uma varivel de referncia para dizer use o que est antes do ponto para me trazer o que est depois do ponto. Por exemplo: myDog.latir(); Significa use o objeto referenciado pela varivel myDog para chamar o mtodo latir(). Quando voc usar o operador ponto em uma varivel de referncia de um objeto, considere isso como se estivesse pressionando um boto do controle remoto desse objeto.

Variveis de Referncia de Objeto


Dog d = new Dog( ) d.latir();

Considere isso como se fosse isso

Variveis de Referncia de Objeto


Uma referncia de objeto apenas um outro valor de varivel.
Algo que despejado em um copo. S que dessa vez o valor um controle remoto.

Varivel primitiva
byte b = 7; // os bits representando o valor 7 ficam guardados na varivel (o copo)

Valor primitivo

Variveis de Referncia de Objeto


Uma referncia de objeto apenas um outro valor de varivel.
Algo que despejado em um copo. S que dessa vez o valor um controle remoto.

Varivel de referncia
Dog d = new Dog( );
objeto Dog

Valor da referncia

Variveis de Referncia de Objeto


Os trs passos da declarao, criao e atribuio de objetos
1 3 2

Dog myDog = new Dog();

Variveis de Referncia de Objeto


1) Declare uma varivel de referncia
Dog myDog = new Dog();

Diz a JVM para alocar espao para uma varivel de referncia. A varivel de referncia ser, para sempre, do tipo Dog. Em outras palavras, um controle remoto que possui botes para controlar um objeto Dog, mas no um Gato ou um Tigre ou um Hipoptamo ou Boto.
myDog Dog

Variveis de Referncia de Objeto


2) Crie um objeto
Dog myDog = new Dog();

Diz a JVM para alocar espao para um novo objeto do tipo Dog na pilha de memria gerenciada pelo coletor de lixo da JVM (Heap).

Objeto Dog

Variveis de Referncia de Objeto


3) Vincule o objeto e a referncia
Dog myDog = new Dog();

Atribui o novo objeto Dog varivel de referncia myDog. Em outras palavras, configura o controle remoto para que ele controle o novo objeto da classe Dog.

myDog

objeto Dog

Dog

Arrays em Java
Conforme foi visto, os tipos primitivos da linguagem Java no so como objetos, isto , as variveis de fato so os endereo de valores daquele tipo e no uma referncia para um endereo em que existe alguma coisa armazenada. Os tipos primitivos so caracterizados pelo nome do tipo (ou simplesmente tipo), nmero de bits e faixa de valores.

Arrays em Java
Arrays so como uma bandeja de copos (variveis) e em Java eles so representados por meio de objetos. Ento, como se cria um array? 1) Declare uma varivel do tipo array de inteiros. Uma varivel do
tipo array um controle remoto para um objeto do array. int[] nums;

2) Crie um novo array de inteiros com com um


comprimento especfico e atribua ele varivel nums previamente declarada como int[ ]. nums = new int[7];

Arrays em Java
Arrays so como uma bandeja de copos (variveis) 3) De a cada elemento no array um valor. Lembre-se que os
elementos em um array do tipo int so simplesmente variveis do tipo int.
7 variveis do tipo int

nums[0] nums[1] nums[2] nums[3] nums[4] nums[5] nums[6]

= = = = = = =

6; 19; 44; 42; 10; 20; 1;

objeto array de int (int[])

Observe que o array em si um objeto, mesmo que seus 7 elementos sejam primitivos

Arrays em Java
Criar um array de objetos Dog
1) Declare uma varivel do tipo array de Dog
Dog[] pets;

2) Crie um novo array de Dog com um comprimento de 7,


e atribua ele varivel pets previamente declarada do tipo Dog[] (array de Dog)

pets = new Dog[7];

O que est faltando?


Ces! Ns temos um array de referncias do tipo Dog, mas ainda no temos objetos reais do tipo Dog!
Dog[]

objeto array de Dog(Dog [ ])

Arrays em Java
Criar um array de objetos Dog
3) Crie novos objetos Dog, e atribua-os aos elementos do array. Lembre-se, elementos
em um array de Dog so apenas variveis de referncia. Ainda precisamos dos objetos do tipo Dog.

pets[0] = new Dog(); pets[1] = new Dog();

Dog

Dog

Dog

Dog Dog

Dog

Dog

objeto array de Dog(Dog[ ])

Dog[]

Arrays em Java
Controlando os objetos Dog do array
Para manipular um objeto referenciado por um elemento de array, basta indicar o nome do array (a referncia para o array), o ndice (em Java eles comeam em 0 e vo at o tamanho declarado 1), e os membros que deseja acessar (geralmente os mtodos que o objeto oferece). Exemplo:
Dog[] pets = new Dog[3]; pets[0] = new Dog(); pets[0].setNome("Fido"); pets[0].latir(3);

Referncias

Santos, R.; Uma Introduo a Programao Orientada a Objetos Usando Java. 1ed, Ed. Campus, 2003. ISBN: 853521206X. Deitel, H. M.; Deitel, P. J.; Java Como Programar. 6ed, Ed. Prentice Hall, 2005. ISBN: 8576050196. Blaha, M.; Rumbaugh, J. Modelagem e projetos baseados em objetos com UML 2. 2. ed. rev. e atual. - Rio de Janeiro, RJ: Elsevier: Campus, 2006. 496 p. ISBN 8535217533 (broch.). Eckel, B.; Thinking in Java. 4ed, Ed. Prentice Hall, 2006. ISBN: 9780131872486. Mclaughlin, Brett; POLLICE, Gary; WEST, David. Use a cabea anlise e projeto orientado ao objeto. Rio de Janeiro: Alta Books, 2007. 441 p. ISBN 9788576081456 (broch.). Sierra, K., Bates, B. Head First Java. , 2ed, Ed. O'Reilly, 2005. 720 p. ISBN 0596009208 Savitch, Walter. Absolute Java. Addison Wesley; 5 th, 2012.0132989964. http://techblog.desenvolvedores.net/tag/poo/

Vous aimerez peut-être aussi