POO - 03 - Alocação de Memória em Java
-
Upload
ludimila-monjardim-casagrande -
Category
Technology
-
view
5.770 -
download
0
Transcript of POO - 03 - Alocação de Memória em Java
Alocação de Memória em Java
Programação Orientada a Objetos
Ludimila Monjardim Casagrande 2012
Criação de Objetos e Alocação de Memória
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 2
Alocação de Memória em Java
Toda vez que uma variável é declarada um espaço
de memória é alocado para a mesma e, quando ela
é inicializada, nesse espaço é armazenado seu
valor:
int x;
x = 0;
Se o tipo da variável não for de um dos tipos
primitivos, então, ela é uma referência para um
objeto.
? x
0 x
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 3
Alocação de Memória em Java
Quando uma referência para um objeto é
declarada, um espaço de memória também é
alocado para a mesma:
Data d;
Para fins didáticos, podemos considerar que
uma referência para um objeto é o endereço de
memória no qual o objeto está alocado.
A referência é o elemento que permite que um
determinado objeto seja acessado.
? d
Alocação de Memória em Java
Após definirmos uma classe, podemos criar
objetos a partir dela.
Os objetos quando criados são alocados na
memória RAM do computador.
Felizmente, todo o processo de alocação do
objeto na memória é gerenciado pela máquina
virtual Java (JVM).
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 4
Alocação de Memória em Java
Quando um objeto é criado, pela chamada de new
<construtor>, os seguintes passos acontecem:
um espaço de memória é alocado para o objeto
criado e suas variáveis de instância são inicializadas
com seus valores default;
as inicializações explícitas programadas para as
variáveis de instância são realizadas;
o construtor chamado é executado;
o endereço de memória no qual o objeto está alocado
é retornado e atribuído para a variável que referencia
o objeto.
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 5
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 6
Exemplo
public class Data {
private int dia = 1;
private int mes = 1;
private int ano = 1800;
public Data (int d, int m, int a){
if((d >= 1 && d <= 31) &&
(m >= 1 && m <= 12) &&
(a >= 1800 && a <= 2100)){
this.dia = d;
this.mes = m;
this.ano = a;
} else {
System.out.println("Erro: Data inválida.");
} }
}
public class Principal{
public static void main (String[ ] args) {
Data hoje = new Data(12, 11, 2012);
}
}
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 7
Alocação de Memória em Java
Passo 1:
A declaração aloca espaço para a referência e a
chamada do construtor aloca espaço para o
objeto criado:
Data hoje = new Data(12, 11, 2012);
? hoje
0 dia 0
0
mes ano
As variáveis de instância são inicializadas
com os valores default
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 8
Alocação de Memória em Java
Passo 2:
As inicializações explícitas das variáveis de
instância são executadas:
Data hoje = new Data(12, 11, 2012);
? hoje
1 dia 1
1800
mes ano
public class Data {
private int dia = 1;
private int mes = 1;
private int ano = 1800;
...
}
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 9
Alocação de Memória em Java
Passo 3:
O construtor chamado é executado:
Data hoje = new Data(12, 11, 2012);
? hoje
12 dia 11
2012
mes ano
public Data (int d, int m, int a){
if((d >= 1 && d <= 31) &&
(m >= 1 && m <= 12) &&
(a >= 1800 && a <= 2100)){
this.dia = d;
this.mes = m;
this.ano = a;
} else {
System.out.println("Erro: Data inválida.");
} }
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 10
Alocação de Memória em Java
Passo 4:
O endereço de memória no qual o objeto está
alocado é retornado e atribuído para a variável
que referencia o objeto:
Data hoje = new Data(12, 11, 2012);
0x0123 hoje
12 dia 11
2012
mes ano
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 11
Teste
public class Teste {
public static void main(String[] args) {
int x = 7;
int y = x;
x = 8;
Data a = new Data(21, 10, 2006);
Data b = a;
a = new Data(28, 10, 2006);
}
}
Quais são os resultados finais?
8 x 7 y
0x0123
0x0123
a b
21 10 2006
Após Data b = a;
x 8
7 y 0x0456
0x0123 a b
28 10 2006
21 10 2006
Após a = new Data(28, 10,2006);
Atividade Prática
Ler o Capítulo 3 da apostila Orientação a
Objetos em Java da K19 Treinamentos e fazer
os exercícios de fixação.
Alocação de Memória ©2012 Ludimila Monjardim Casagrande 12