12
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

POO - 03 - Alocação de Memória em Java

Embed Size (px)

Citation preview

Page 1: 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

Page 2: POO - 03 - Alocação de Memória em Java

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

Page 3: POO - 03 - Alocação de Memória em Java

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

Page 4: POO - 03 - Alocação de Memória em Java

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

Page 5: POO - 03 - Alocação de Memória em Java

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

Page 6: POO - 03 - Alocação de Memória em Java

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);

}

}

Page 7: POO - 03 - Alocação de Memória em Java

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

Page 8: POO - 03 - Alocação de Memória em Java

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;

...

}

Page 9: POO - 03 - Alocação de Memória em Java

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.");

} }

Page 10: POO - 03 - Alocação de Memória em Java

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

Page 11: POO - 03 - Alocação de Memória em Java

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);

Page 12: POO - 03 - Alocação de Memória em Java

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