Atribuições
Upcoming SlideShare
Loading in...5
×
 

Atribuições

on

  • 2,016 views

 

Statistics

Views

Total Views
2,016
Views on SlideShare
1,940
Embed Views
76

Actions

Likes
0
Downloads
21
Comments
0

5 Embeds 76

http://www.elenilsonvieira.com.br 55
http://blogs.sun.com 15
https://blogs.oracle.com 3
http://blogs.oracle.com 2
http://www.elenilsonvieira.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Atribuições Atribuições Presentation Transcript

  • Pilha e Heap - Overview Variáveis de instância e objetos estão no heap Variáveis locais estão na pilha
  • Literais, Atribuições e Variáveis 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,
  • Literais, Atribuições e Variáveis Valores literais para os tipos primitivos: ◦ Boolean true ou false boolean bubu = false; ◦ Caractere char letra = ‘t’; char f = ‘n’; char letraN = ‘u004E’; // Notação Unicode char b = 0x892; char d = -98; // Possível perda de precisão, é necessário cast
  • Literais, Atribuições e Variáveis 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 Atribuição Variáveis são caixinhas de bits de um tipo designado. Variável de Referência – caminho do objeto
  • Atribuições de Primitivas O ‘=’ é usado para atribuir um valor a uma variável Atribuir 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
  • Casting de Primitivas Implícitos: ◦ int a = 100; ◦ long b = a; Explícitos: ◦ Float a = 100.00F; ◦ int b = (int) a;
  • Número 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
  • Atribuição entre Variáveis Cópia de valores Variáveis com valores independentes: ◦ int a =10; ◦ int b = a; Alterar o valor de ‘b’ não irá alterar o valor de ‘a’.
  • Variáveis 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.
  • Variáveis de Referência public 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 subclass of Foo Bar reallyAFoo = new Foo(); // Illegal! Foo is not a subclass of Bar } }
  • Escopo de variáveis 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 Variáveis 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.
  • Variável de Instância Variável membro Inicializadas com valor default Podem ser inicializadas com outros valores
  • Variável de Instância Primitivas: Referência:
  • Variável de Instância Array ◦ Se não for inicializado é null ◦ Se inicializado todos os seus elementos são inicializados com o default do tipo do array
  • Variável Local Primitivas: ◦ Devem sempre ser inicializadas ◦ Se não inicializar não use ◦ Cuidado com blocos condicionais Referências: ◦ Não recebem o valor null ◦ Elas não são inicializadas
  • Variável 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 Outra Irão acessar o mesmo objeto Modificações feitas por uma referência se refletirão nas outras String não atualiza suas referências
  • Passando variáveis para métodos 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 variáveis para métodos Primitivas ◦ Passagem por cópia ◦ A variável local do método não altera o valor da variável que foi passada
  • Arrays Declaração: ◦ int[] arr; ou int arr[]; ◦ String[] strArr; ou String strArr[]; Recomendado colocar colchetes depois da declaração do tipo Não colocar o tamanho na declaração: ◦ int[5] arr;
  • Arrays Unidimensionais: ◦ int[] testScores = new int[4];
  • Arrays Unidimensionais ◦ Thread[] threadArr = new Thread[4]; Na linha acima o construtor de Thread não é chamado Nenhuma instância de Thread é criada Existe 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
  • Arrays Multidimensionais: ◦ int[][] my array = new int[3][];
  • Arrays Multidimensionais: ◦ Array de arrays ◦ Necessita do tamanho do primeiro array int[][] multi = new int[3][]; ◦ Os outros podem ser diferentes
  • Array Inicializaçã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};
  • Arrays - Atribuiçõ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();
  • Arrays - Referências Atribuições entre referências: ◦ Tipos primitivos diferem ◦ Array de Objetos: De superclasse para subclasse De interface para classe que a implementa ◦ Exemplos: int[] vivo; byte[] dois = new byte[3]; vivo = dois; // Ops! Não pode Serializable[] eita; String[] str = new String[3]; eita = str; // OK!
  • Arrays - Referências Multidimensionais:
  • Blocos de Inicialização Está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 Inicialização Saída
  • Classes Wrapper Duas 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 Wrapper
  • Classes Wrapper Construtores: ◦ String ou o valor tipo primitivo ◦ Character recebe um caractere simples Métodos valueOf(): ◦ Existem dois: valueOf(String str) valueOf(String str, int radix) ◦ O segundo não está presente em todos
  • Classes Wrapper Conversões: ◦ xxxValue() Converte um valor wrapped em um primitivo Todos são sem argumentos Integer 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 Wrapper Conversões: ◦ parseXxx() e valueOf(): Ambos recebem uma String como argumento Em algumas classes tem um segundo argumento Única diferença: valueOf() – retorna um objeto wrapper recentemente criado do tipo que invocou parseXxx() – retorna o valor primitivo do qual foi chamado Exemplos: double d = Double.parseDouble(“3,14”); Double db = Double.valueOf(“3.14”);
  • Classes Wrapper Conversões: ◦ toXxxString(): Presente nas classes Integer e Long Transformam inteiros em: Hexa, Octal e Binário Exemplos: String hexa = Integer.toHexString(254); String octal = Long.toOctalString(254);
  • Classes Wrapper
  • Autoboxing Antes: Agora: Saída y = 568; // Em ambas
  • Autoboxing Boxing, ==, equals() ◦ O operador == para valores até 127 resultará em true Integer 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
  • Sobrecarga Com Boxing e Var-args:
  • Sobrecarga Com Boxing e Var-args:
  • Sobrecarga Usando Boxing e Widening Usando em combinação com Var-args
  • Sobrecarga Regras 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
  • Garbage Collector Solução automática para gerenciamento de memória Você não controla ele O GC atua sobre o heap Atua sobre os objetos que são inalcançáveis Sua tarefa é limpar a memória
  • Garbage Collector Quando é executado? ◦ Quem decide é a JVM ◦ Você só pode dar uma sugestão ◦ Normalmente quando tem pouca memória
  • Garbage Collector Tornando 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
  • Garbage Collector
  • Garbage Collector Forçando GC ◦ O GC não pode ser forçado ◦ Existe um método que solicita a JVM que ela execute o GC System.gc() ◦ Desaconselha-se usar esse método ◦ Foi retirado do exame Java 6
  • Garbage Collector Limpando 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 GC Chamando finalize() pode de fato salvar um objeto da “deleção”