• Nenhum resultado encontrado

InicializaçãoeFinalizaçãodeObjetos

N/A
N/A
Protected

Academic year: 2021

Share "InicializaçãoeFinalizaçãodeObjetos"

Copied!
37
0
0

Texto

(1)

Inicialização e Finalização de

Objetos

(2)
(3)

Inicialização e Finalização de Objetos

A inicialização automática de variáveis em Java

se dá de duas formas:

Variáveis locais a métodos

Variáveis de instância ou de classe

(4)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

A inicialização automática de variáveis em

Java se dá de duas formas:

Variáveis locais a métodos

nenhuma inicialização automática é realizada. O compilador checa se as variáveis foram

inicializadas antes do seu uso

(5)

Inicialização e Finalização de Objetos

A inicialização automática de variáveis em Java

se dá de duas formas:

Variáveis de instância ou de classe

tipos numéricos e caractere são inicializados com zeros (caso o caractere seja impresso a saída será um

espaço), tipo booleano é inicializado com false e referências são inicializadas com null.

(6)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Inicialização de atributos de Instância

Existem dois lugares onde os atributos de instância podem ser inicializados: dentro do construtor ou na declaração do atributo. No exemplo 1 é

demonstrado estes dois tipos de inicialização. O atributo a é inicializado na declaração e o

(7)

Inicialização e Finalização de Objetos

Inicialização de atributos de Instância Exemplo 1

(8)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Inicialização de atributos de Instância

Qual é a diferença entre os dois tipos de inicialização?

A primeira diferença é que os construtores são parametrizados e, portanto, a

inicialização com construtor pode variar conforme os parâmetros passados.

A segunda diferença é que a inicialização no construtor é feita após a inicialização na declaração.

(9)

Inicialização e Finalização de Objetos

Inicialização de atributos de classe

A inicialização das variáveis de classe não pode ocorrer dentro dos construtores, uma vez que o construtor pertence ao objeto e não à classe. Outra diferença é que a inicialização só ocorre uma vez, já que existe apenas uma versão

atributo. A inicialização ocorre quando o primeiro objeto é criado.

(10)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Blocos de inicialização

Java permite que as inicializações de atributos, tanto de classe como de instâncias de classe sejam

agrupadas em blocos. No exemplo 2 pode-se observar o uso de blocos de inicialização

{ ….

}

(11)

Inicialização e Finalização de Objetos

Blocos de inicialização

Exemplo 2

(12)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Ordem de inicialização

Como já foi dito a inicialização na

declaração é feita antes da

inicialização no construtor.

E no caso da herança? O que é

inicializado primeiro? A classe ou a

superclasse?

(13)

Inicialização e Finalização de Objetos

Ordem de inicialização

Nesse caso a super classe é inicializada primeiro. Mesmo que não ocorra uma invocação explícita ao construtor da superclasse é chamado o construtor default. No exemplo 3 é mostrado a seqüência de inicialização em uma herança.

(14)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

(15)

Inicialização e Finalização de Objetos

Ordem de inicialização - Exemplo 3

Saída:

X foi inicializada! Y foi inicializada!

(16)
(17)

Inicialização e Finalização de Objetos

Finalização de Objetos

Com a linguagem Java não existe a preocupação de liberar a memória, como é o caso de C/C++, uma vez que os objetos que não estão sendo

referenciados são coletados automaticamente pelo coletor de lixo (GC).

(18)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Finalização de Objetos

No entanto, em Java pode-se invocar uma função

de C/C++ por meio de uma chamada nativa, e

como esta função pode alocar memória que não

será devolvida pelo coletor de lixo, então pode

ser necessária alguma forma de devolver

explicitamente esta memória quando o objeto for

coletado. Para esses casos a programador deve

prover o método

finalize(),

que será invocado

quando o objeto for coletado.

(19)

Inicialização e Finalização de Objetos

Finalização de Objetos

O método

finalize()

não é para ser chamado explicitamente. Ele é invocado pela máquina

virtual antes de devolver a memória usada pelo objeto. Nele o programador deve devolver a

memória alocada por métodos nativos e associada ao objeto

(20)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Alocação e liberação de memória

A criação de um objeto geralmente envolve

–Alocação de memória no heap para conter o objeto –Atribuição do ponteiro (endereço no heap onde o

espaço para o objeto foi alocado) a uma variável de pilha (referência)

(21)

Inicialização e Finalização de Objetos

Alocação e liberação de memória

Objetos podem ser criados explicitamente

de duas formas:

–através de uma expressão new Classe()

(22)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Apenas

objetos String

podem ser

criados implicitamente

Através da definição de um literal ou carga de uma classe que possui literais do tipo String

(23)

Inicialização e Finalização de Objetos

Quando uma nova instância de uma classe é

criada

Memória é alocada para todas as variáveis de instância declaradas na classe e superclasses, inclusive variáveis ocultas.

–Não havendo espaço suficiente para alocar

memória para o objeto, a criação termina com um OutOfMemoryError

(24)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Se a alocação de memória terminar com

sucesso

Todas as variáveis de instância do novo objeto (inclusive aquelas declaradas nas superclasses) são inicializadas a seus valores default(0, null, false, ‘\u0000’)

No passo seguinte, os valores passados como

argumentos do construtor passados às

variáveis de parâmetro locais e a construção é

iniciada

(25)

Inicialização e Finalização de Objetos

Finalizaçãoé importante?

Depende.

Há objetos que não precisam de finalizadores

Aqueles cujos recursos são automaticamente liberados pelo coletor de lixo: qualquer tipo de alocação na

(26)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Finalizaçãoé importante?

Há objetos que precisam de finalizadores

Fechar arquivos abertos e sockets(o sistema operacional limita a quantidade de recursos que são abertos; não finalizar depois do uso pode impedir a criação de novos arquivos ou sockets)

Fechar streams (fluxos de gravação podem ficar incompletos se buffer não for esvaziado)

Fechar threads(threads costumam rodar em loops; finalizadores ligam um flag para terminar o loop ou interrompem o thread e evitar que o programa nunca termine)

(27)

Inicialização e Finalização de Objetos

Finalizadores automáticos

Em Java, cada objeto pode ter um finalizador

chamado automaticamente antes de um objeto ser destruído

Para implementar, é preciso sobrepor a assinatura:

(28)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Finalizadores automáticos

finalize()é chamado automaticamente e apenas uma vez somente quando o objeto não for mais alcançável a través de referências comuns (raiz) O método finalize()não será chamado se

Não sobrepuser explicitamente o método original (uso é opcional!)

Não houver necessidade de liberar memória (GC não executar), mesmo que todas as referências do objeto tenham sido perdidas

(29)

Inicialização e Finalização de Objetos

Finalizadores automáticos

A chamada dos finalizadores automáticos não é garantida

(30)
(31)

Inicialização e Finalização de Objetos

(32)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

(33)

Inicialização e Finalização de Objetos

REVISANDO.

Os Atributos em Programação Orientada a Objetos são os elementos que definem a estrutura de uma classe. Os atributos também são conhecidos como variáveis de classe, e podem ser divididos em dois tipos básicos:

atributos de instância e de classe. Os valores dos atributos de instância determinam o estado de cada objeto. Um atributo de classe possui um estado que é compartilhado por todos os objetos de uma classe. Atributos de classe podem ser chamados também de atributos estáticos ou constantes.

(34)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

Sockets

Um socket é um mecanismo de comunicação

(dois sentidos) entre dois programas a

(35)
(36)

Inicialização e Finalização de Objetos

ALBERTO WILLIAN MASCARENNHAS http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

CRÉDITOS

JAVA NA PRÁTICA

Volume I

Alcione de Paiva Oliveira Vinícius Valente Maciel

UNIVERSIDADE FEDERAL DE VIÇOSA DEPARTAMENTO DE INFORMÁTICA

(37)

Inicialização e Finalização de Objetos

CRÉDITOS

Gerência de Memória em Java Parte III:

Finalização, memory leakse objetos de referência

Helder da Rocha

Referências

Documentos relacionados

Trazei todos os dízimos à casa do tesouro, para que haja mantimento na minha casa, e depois fazei prova de mim nisto, diz o SENHOR dos Exércitos, se eu não vos abrir as janelas

Essa dimensão é composta pelos conceitos que permitem refletir sobre a origem e a dinâmica de transformação nas representações e práticas sociais que se relacionam com as

Deus não vai perguntar quantas pessoas você atraiu para a igreja.... mas vai perguntar como você influenciou o Mundo à

En France, PSA 2 veut aussi donner plus d’autonomie aux véhicules pour plus de sécurité et plus de confort, notamment dans les bouchons.. Les travaux du constructeur

Da mesma forma, O Filho de Deus teve uma existência com Deus, interagiu com Deus, porem como eu e você Ele não tinha um corpo como o temos hoje, mas quando chegou o momento do Filho

The multiple impacts of soybean expansion on biodiversity and other development considerations ha ve several implications for policy: (1) protected areas need to

O WHOQOL-HIV-Bref possui suas 31 questões, ou facetas, distribuídas entre 1 componente de percepção global e 6 domínios de avaliação da qualidade de vida: físico;

Diabetes is a chronic progressive metabolic disease characterized by hyperglycemia due mainly to absolute insulin insufficiency (type 1 diabetes) or relative