SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
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”

Más contenido relacionado

La actualidad más candente

Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Ponteiros e Alocação Dinâmica
Ponteiros e Alocação DinâmicaPonteiros e Alocação Dinâmica
Ponteiros e Alocação DinâmicaEduardo Oliveira
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoAdriano Teixeira de Souza
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Luciano Ramalho
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano Ramalho
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Luciano Ramalho
 

La actualidad más candente (20)

Fundamentos de C#
Fundamentos de C#Fundamentos de C#
Fundamentos de C#
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Ponteiros e Alocação Dinâmica
Ponteiros e Alocação DinâmicaPonteiros e Alocação Dinâmica
Ponteiros e Alocação Dinâmica
 
Java Básico
Java BásicoJava Básico
Java Básico
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
PHP
PHPPHP
PHP
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Apostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em CApostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em C
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 

Destacado

Proyecto Parte 2 Presentación3
Proyecto Parte 2 Presentación3 Proyecto Parte 2 Presentación3
Proyecto Parte 2 Presentación3 Jenniffermendez
 
Smoopedsfonttest
SmoopedsfonttestSmoopedsfonttest
SmoopedsfonttestHeather Lee
 
Accounting plaza brochure e-invoicing
Accounting plaza brochure e-invoicingAccounting plaza brochure e-invoicing
Accounting plaza brochure e-invoicingFriso de Jong
 
CIPA - Comissão Interna de Prevenção de Acidentes
CIPA - Comissão Interna de Prevenção de AcidentesCIPA - Comissão Interna de Prevenção de Acidentes
CIPA - Comissão Interna de Prevenção de AcidentesGui Souza A
 

Destacado (7)

Proyecto Parte 2 Presentación3
Proyecto Parte 2 Presentación3 Proyecto Parte 2 Presentación3
Proyecto Parte 2 Presentación3
 
Smoopedsfonttest
SmoopedsfonttestSmoopedsfonttest
Smoopedsfonttest
 
Emerging Market’S Future
Emerging Market’S FutureEmerging Market’S Future
Emerging Market’S Future
 
Cc
CcCc
Cc
 
Accounting plaza brochure e-invoicing
Accounting plaza brochure e-invoicingAccounting plaza brochure e-invoicing
Accounting plaza brochure e-invoicing
 
Juniper Bgp
Juniper BgpJuniper Bgp
Juniper Bgp
 
CIPA - Comissão Interna de Prevenção de Acidentes
CIPA - Comissão Interna de Prevenção de AcidentesCIPA - Comissão Interna de Prevenção de Acidentes
CIPA - Comissão Interna de Prevenção de Acidentes
 

Similar a Atribuições

6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_javaMarcos Souza
 
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoriaRicardo Bolanho
 
Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)raquelcarsi
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: IntroduçãoWesley R. Bezerra
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - ComparandoWesley Lemos
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – IIIGabriel Faustino
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7iMasters
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doublePAULO Moreira
 

Similar a Atribuições (20)

Aula2
Aula2Aula2
Aula2
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_java
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
JAVA - Introdução
JAVA - IntroduçãoJAVA - Introdução
JAVA - Introdução
 
Unidade7 1
Unidade7 1Unidade7 1
Unidade7 1
 
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
 
Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)Mini Curso Java Day(Eliane Raquel)
Mini Curso Java Day(Eliane Raquel)
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: Introdução
 
7194099-Manual-de-Java
7194099-Manual-de-Java7194099-Manual-de-Java
7194099-Manual-de-Java
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Php
PhpPhp
Php
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 
Java2
Java2Java2
Java2
 
Minicurso Java && Cl
Minicurso Java && ClMinicurso Java && Cl
Minicurso Java && Cl
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
PHP 7
PHP 7PHP 7
PHP 7
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
 

Más de Elenilson Vieira (20)

Aulão de JPA com Tomaz Lavieri
Aulão de JPA com Tomaz LavieriAulão de JPA com Tomaz Lavieri
Aulão de JPA com Tomaz Lavieri
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
JavaEE
JavaEEJavaEE
JavaEE
 
JavaME no Mercado Mobile
JavaME no Mercado MobileJavaME no Mercado Mobile
JavaME no Mercado Mobile
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Apresentação da Doom
Apresentação da DoomApresentação da Doom
Apresentação da Doom
 
Palestra sobre a Sun
Palestra sobre a SunPalestra sobre a Sun
Palestra sobre a Sun
 
Apresentação da RedeSoft
Apresentação da RedeSoftApresentação da RedeSoft
Apresentação da RedeSoft
 
Java Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriJava Collections - Tomaz Lavieri
Java Collections - Tomaz Lavieri
 
A Sun no Meio Acadêmico - IESP/FatecPB
A Sun no Meio Acadêmico - IESP/FatecPBA Sun no Meio Acadêmico - IESP/FatecPB
A Sun no Meio Acadêmico - IESP/FatecPB
 
Mini-Curso de Sockets no Unipê
Mini-Curso de Sockets no UnipêMini-Curso de Sockets no Unipê
Mini-Curso de Sockets no Unipê
 
JavaME
JavaMEJavaME
JavaME
 
Concorrência com Java
Concorrência com JavaConcorrência com Java
Concorrência com Java
 
Programas Acadêmicos da Sun no Unipê
Programas Acadêmicos da Sun no UnipêProgramas Acadêmicos da Sun no Unipê
Programas Acadêmicos da Sun no Unipê
 
Mundo Livre e Aberto
Mundo Livre e AbertoMundo Livre e Aberto
Mundo Livre e Aberto
 
JavaME - Aula 2
JavaME - Aula 2JavaME - Aula 2
JavaME - Aula 2
 
JavaME - Aula 1
JavaME - Aula 1JavaME - Aula 1
JavaME - Aula 1
 
Apostila JavaME
Apostila JavaMEApostila JavaME
Apostila JavaME
 
Threads
ThreadsThreads
Threads
 
Sincronização - Glêdson Elias
Sincronização - Glêdson EliasSincronização - Glêdson Elias
Sincronização - Glêdson Elias
 

Atribuições

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