atribuições

52

Upload: elenilson-vieira

Post on 18-Nov-2014

2.078 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Pilha e Pilha e HeapHeap -- OverviewOverview

Variáveis de instância e objetos estão no heap

Variáveis locais estão na pilha

Literais, AtribuiLiterais, Atribuiçções e ões e VariVariááveisveis

Valores literais para os tipos primitivos:

◦ Inteiros:Decimais: int length = 342;Octais: int eigth = 010;Hexadecimais: int z = 0xDeadCafe;

◦ Ponto Flutuante:Double: valor default. double dedo = 358.1479;Float: float flutuar = 268.214F;float err = 264.987; // Erro de compilação,

í l d d i ã

Literais, AtribuiLiterais, Atribuiçções e ões e VariVariááveisveis

Valores literais para os tipos primitivos:

◦ Booleantrue ou falseboolean bubu = false;

◦ Caracterechar letra = ‘t’; char f = ‘\n’;char letraN = ‘\u004E’; // Notação Unicodechar b = 0x892;char d = -98; // Possível perda de precisão, énecessário cast

Literais, AtribuiLiterais, Atribuiçções e ões e VariVariááveisveis

Valores literais para Strings:

◦ Uma string literal é uma representação de um valor de um objeto String.

String str = “SCJP”;System.out.println(“Boca Juniors” + “ vuou.”);

◦ String não é um tipo primitivo.

Array não é um tipo primitivo, mas também possui uma representação literal

Operadores de AtribuiOperadores de Atribuiççãoão

Variáveis são caixinhas de bits de um tipo designado.

Variável de Referência – caminho do objeto

AtribuiAtribuiçções de Primitivasões de Primitivas

O ‘=’ é usado para atribuir um valor a uma variávelAtribuir literal ou valor de uma expressão:

int num = 5;int num = x + 2;

Cuidado nas atribuições de byte,char, short, long e float

CastingCasting de Primitivasde Primitivas

Implícitos:◦ int a = 100;◦ long b = a;

Explícitos:◦ Float a = 100.00F;◦ int b = (int) a;

NNúúmero de Ponto Flutuantemero de Ponto Flutuante

Default é double

Não possui cast implícito

Obrigatório o uso do ‘f’ ou ‘F’ para float◦ double db = 32.6; // OK◦ float ft = 32.6; // Não Pode◦ float hi = 33.6F; // OK

AtribuiAtribuiçção entre Varião entre Variááveisveis

Cópia de valoresVariáveis com valores independentes:◦ int a =10;◦ int b = a;Alterar o valor de ‘b’ não irá alterar o valor de ‘a’.

VariVariááveis de Referênciaveis de Referência

Button b = new Button();

Acontece três coisas na linha acima:◦ Uma referência do tipo Button nomeada b

é criada◦ Um novo objeto Button é criado no heap◦ Atribui o objeto Botão recentemente

criado à referência b.

VariVariááveis de Referênciaveis de Referênciapublic class Foo {

public void doFooStuff() { }}public class Bar extends Foo {

public void doBarStuff() { }}class Test {

public static void main (String [] args) {Foo reallyABar = new Bar(); // Legal because Bar is a subclassof FooBar reallyAFoo = new Foo(); // Illegal! Foo is not a subclass of Bar

}}

Escopo de variEscopo de variááveisveis

Existem quatro escopos:◦ Variáveis estáticas têm o maior escopo◦ Variáveis de instância é a segunda◦ Variáveis locais◦ Variáveis de bloco

Escopo de VariEscopo de Variááveisveis

Erros comuns:

◦ Tentar acessar uma variável de instância em um contexto estático◦ Tentar acessar uma variável local de um

método por um método aninhado◦ Tentar usar uma variável de um bloco

depois desses bloco já ter terminado.

VariVariáável de Instânciavel de InstânciaVariável membroInicializadas com valor defaultPodem ser inicializadas com outros valores

VariVariáável de Instânciavel de InstânciaPrimitivas:

Referência:

VariVariáável de Instânciavel de InstânciaArray◦ Se não for inicializado é null◦ Se inicializado todos os seus elementos

são inicializados com o default do tipo do array

VariVariáável Localvel Local

Primitivas:◦ Devem sempre ser inicializadas◦ Se não inicializar não use◦ Cuidado com blocos condicionaisReferências:◦ Não recebem o valor null◦ Elas não são inicializadas

VariVariáável Localvel Local

Array◦ Devem ser inicializados◦ Não recebem null◦ Se forem inicializados não é necessário

atribuir valores a seus elementos

Atribuindo Referência a OutraAtribuindo Referência a OutraIrão acessar o mesmo objetoModificações feitas por uma referência se refletirão nas outrasString não atualiza suas referências

Passando variPassando variááveis para veis para mméétodostodos

Referência◦ Copia o objeto para a referência local do

método◦ Tanto a referência interna quanto a

externa referenciam o mesmo objeto no heap

Passando variPassando variááveis para veis para mméétodostodos

Primitivas◦ Passagem por cópia◦ A variável local do método não altera o

valor da variável que foi passada

ArraysArrays

Declaração:◦ int[] arr; ou int arr[];◦ String[] strArr; ou String strArr[];Recomendado colocar colchetes depois da declaração do tipoNão colocar o tamanho na declaração:◦ int[5] arr;

ArraysArraysUnidimensionais:◦ int[] testScores = new int[4];

ArraysArraysUnidimensionais◦ Thread[] threadArr = new Thread[4];

Na linha acima o construtor de Thread não échamadoNenhuma instância de Thread é criadaExiste apenas um array cujos elementos são objetos do tipo Thread

◦ É necessário a definição do tamnaho:int[] arr = new int[]; // Erro de Compilação

ArraysArraysMultidimensionais:◦ int[][] my array = new int[3][];

ArraysArraysMultidimensionais:

◦ Array de arrays◦ Necessita do tamanho do primeiro array

int[][] multi = new int[3][];◦ Os outros podem ser diferentes

ArrayArrayInicialização:◦ Animal[] pets = new Animal[2];

pets[0] = new Animal();◦ int[][] multi = new int[3][];

mult[0] = new int[4];mult[1] = new int[10];

◦ int[] arr = {1, 2, 3};◦ Thread[] th = {new Thread(), new

Thread()};◦ int[][] m = { {5, 2, 4, 7}, {9, 2}, {3, 4} };◦ int[] oi = new int[] {1, 2, 3};

ArraysArrays -- AtribuiAtribuiççõesões

Primitivas:◦ Mesmas regras que uma variável

byte[] b = new byte[2];b[0] = (byte) 128;

Referências:◦ Mesmas regras que uma referência

Car[] car = new Car[3];car[0] = new Ferrari();

ArraysArrays -- ReferênciasReferênciasAtribuições entre referências:◦ Tipos primitivos diferem◦ Array de Objetos:

De superclasse para subclasseDe interface para classe que a implementa

◦ Exemplos:int[] vivo;byte[] dois = new byte[3];vivo = dois; // Ops! Não podeSerializable[] eita;String[] str = new String[3];eita = str; // OK!

ArraysArrays -- ReferênciasReferênciasMultidimensionais:

Blocos de Blocos de InicializaInicializaççãoãoEstáticos:◦ Executado quando a classe é carregada

static int x;static { x = 7; }

Instância:◦ Executado quando uma instância é criada

int y;{ y = 5; }

Blocos de Blocos de InicializaInicializaççãoão

Saída

Classes Classes WrapperWrapperDuas finalidades:◦ Prover um mecanismo no qual

transformasse um primitivo em um objeto◦ Prover um sortimento de funções úteis

sobre os primitivos

Semelhança do nome das classes com os primitivos

Classes Classes WrapperWrapper

Classes Classes WrapperWrapperConstrutores:◦ String ou o valor tipo primitivo◦ Character recebe um caractere simplesMétodos valueOf():◦ Existem dois:

valueOf(String str)valueOf(String str, int radix)

◦ O segundo não está presente em todos

Classes Classes WrapperWrapperConversões:◦ xxxValue()

Converte um valor wrapped em um primitivoTodos são sem argumentosInteger i2 = new Integer(42);int i = i2.intValue();short s = i2.shortValue();double d = i2.doubleValue();Float f2 = new Float(3.14f);short st = f2.shortValue();

Classes Classes WrapperWrapperConversões:◦ parseXxx() e valueOf():

Ambos recebem uma String como argumentoEm algumas classes tem um segundo argumentoÚnica diferença:

valueOf() – retorna um objeto wrapper recentemente criado do tipo que invocouparseXxx() – retorna o valor primitivo do qual foi chamado

Exemplos:double d = Double.parseDouble(“3,14”);Double db = Double.valueOf(“3.14”);

Classes Classes WrapperWrapperConversões:◦ toXxxString():

Presente nas classes Integer e LongTransformam inteiros em: Hexa, Octal e BinárioExemplos:

String hexa = Integer.toHexString(254);String octal = Long.toOctalString(254);

Classes Classes WrapperWrapper

AutoboxingAutoboxingAntes:

Agora:

Saída y = 568; // Em ambas

AutoboxingAutoboxingBoxing, ==, equals()◦ O operador == para valores até 127

resultará em trueInteger i2 = 10;Integer i3 = 10;System.out.println(“i2 == i3: ” + (i2==i3));Integer i2 = 1000;Integer i3 = 1000;System.out.println(“i2 == i3: ” + (i2==i3));

◦ No primeiro caso true segundo false◦ equals() retornará a realidade

SobrecargaSobrecargaCom Boxing e Var-args:

SobrecargaSobrecargaCom Boxing e Var-args:

SobrecargaSobrecargaUsando Boxing e Widening

Usando em combinação com Var-args

SobrecargaSobrecargaRegras para sobracarga usando widening, boxing e var-args:◦ O aumento do primitivo usará o menor

argumento possível do método◦ Usados individualmente, boxing e var-args são

compatíveis com sobrecarga◦ Você não pode aumentar o tipo de um wrapper

para outro◦ Você não pode aumentar e então fazero box◦ Você pode fazer o box e aumentar◦ Você pode combinar var-args com widening e

boxing

GarbageGarbage CollectorCollector

Solução automática para gerenciamento de memóriaVocê não controla eleO GC atua sobre o heapAtua sobre os objetos que são inalcançáveisSua tarefa é limpar a memória

GarbageGarbage CollectorCollector

Quando é executado?

◦ Quem decide é a JVM◦ Você só pode dar uma sugestão◦ Normalmente quando tem pouca

memória

GarbageGarbage CollectorCollectorTornando um Objeto elegível para o GC:

◦ Torná-lo inalcançável◦ Atribuir null a sua referência◦ Atribuir a sua referência outro objeto◦ Objetos locais também tornam-se

elegíveis depois da execução do metódo◦ Isolando uma referência

GarbageGarbage CollectorCollector

GarbageGarbage CollectorCollectorForçando GC

◦ O GC não pode ser forçado◦ Existe um método que solicita a JVM que

ela execute o GCSystem.gc()

◦ Desaconselha-se usar esse método◦ Foi retirado do exame Java 6

GarbageGarbage CollectorCollectorLimpando o Objeto antes do GC dá-lhe um sumiço◦ método finalize()◦ Não é garantido que seja executado◦ Não por código essencial no finalize()◦ O(A) autor(a) recomenda não sobrescrever◦ Importante:

Para qualquer determinado objeto, finalize() só será chamado uma vez (no máximo) pelo GCChamando finalize() pode de fato salvar um objeto da “deleção”