• Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,140
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
22
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Pilha e Heap - Overview Variáveis de instância e objetos estão no heap Variáveis locais estão na pilha
  • 2. 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,
  • 3. 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
  • 4. 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
  • 5. Operadores de Atribuição Variáveis são caixinhas de bits de um tipo designado. Variável de Referência – caminho do objeto
  • 6. 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
  • 7. Casting de Primitivas Implícitos: ◦ int a = 100; ◦ long b = a; Explícitos: ◦ Float a = 100.00F; ◦ int b = (int) a;
  • 8. 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
  • 9. 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’.
  • 10. 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.
  • 11. 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 } }
  • 12. 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
  • 13. 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.
  • 14. Variável de Instância Variável membro Inicializadas com valor default Podem ser inicializadas com outros valores
  • 15. Variável de Instância Primitivas: Referência:
  • 16. 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
  • 17. 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
  • 18. Variável Local Array ◦ Devem ser inicializados ◦ Não recebem null ◦ Se forem inicializados não é necessário atribuir valores a seus elementos
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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;
  • 23. Arrays Unidimensionais: ◦ int[] testScores = new int[4];
  • 24. 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
  • 25. Arrays Multidimensionais: ◦ int[][] my array = new int[3][];
  • 26. Arrays Multidimensionais: ◦ Array de arrays ◦ Necessita do tamanho do primeiro array int[][] multi = new int[3][]; ◦ Os outros podem ser diferentes
  • 27. 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};
  • 28. 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();
  • 29. 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!
  • 30. Arrays - Referências Multidimensionais:
  • 31. 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; }
  • 32. Blocos de Inicialização Saída
  • 33. 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
  • 34. Classes Wrapper
  • 35. 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
  • 36. 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();
  • 37. 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”);
  • 38. 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);
  • 39. Classes Wrapper
  • 40. Autoboxing Antes: Agora: Saída y = 568; // Em ambas
  • 41. 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
  • 42. Sobrecarga Com Boxing e Var-args:
  • 43. Sobrecarga Com Boxing e Var-args:
  • 44. Sobrecarga Usando Boxing e Widening Usando em combinação com Var-args
  • 45. 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
  • 46. 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
  • 47. Garbage Collector Quando é executado? ◦ Quem decide é a JVM ◦ Você só pode dar uma sugestão ◦ Normalmente quando tem pouca memória
  • 48. 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
  • 49. Garbage Collector
  • 50. 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
  • 51. 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”