Comando new e construtores

8 respostas
dntalemao

Galera o operador new é responsável em alocar memória para as variáveis de instância, de chamar o construtor e retornar a referência do objeto?
Já o construtor é apenas responsável em executar comandos descritos dentro de seu escopo e nada mais, como por exemplo inicializar as variáveis de instância. Os construtores não são responsáveis em retornar a referência do objeto e nem em criar o objeto em si certo?
Fiquei na dúvida ao ler um artigo meio duvidoso sobre java, falando sobre chamadas explicidas de construtores da superclasse.

obrigado

8 Respostas

d34d_d3v1l

Quais artigos?

dntalemao

vou ficar te devendo, li no computador da faculdade e nao me lembro mais qual era o site. Procurei aqui e não achei.

Alys

Bem, minhas dicas:

  1. Use artigos somentes de fontes confiáveis. Já vi alguns artigos falando bobagens, ao procurar determinados assuntos no Google.

  2. Na dúvida, vá direto na fonte oficial: a documentação da Oracle/SUN;

Creating Objects
Providing Constructors for Your Classes

lina

Oi,

Definição excelente:

“O operador new cria um objeto enquanto o programa está sendo executado, obtendo memória suficiente para armazenar um objeto do tipo especificado à direita de new. O processo de criar novos objetos é também conhecido como criar uma instância ou instanciar um objeto. O operador new é conhecido como operador de alocação de memória dinâmica. O valor entre parênteses depois do tipo em um operador new é utilizado para inicializar (i. e., atribuir um valor a) o novo objeto”. (Java, como programar / H. M. Deitei e P. J. Deitei; trad. Carlos Arthur Lang Lisboa. - 4,ed. - Porto Alegre: Bookman, 2003, p.192).

Tchauzin!

douglaskd

vou tentar imaginar o new na forma mais simplista possivel

public Referencia New(TipoObjeto){

Referencia instancia = AlocarMemoria(TipoObjeto);

instancia.executarConstrutor();

return instancia;

}

espero que eu esteja correto

dntalemao

Valeu galera!

sergiotaborda

dntalemao:
Galera o operador new é responsável em alocar memória para as variáveis de instância, de chamar o construtor e retornar a referência do objeto?

Não bem. O responsável por alocar a memória é a JVM. new não é o mesmo que o maloc do C. Ele não devolve a referencia, ele devolve o objeto construido (as referencias são implicitas em java). Em resumo, ele é apenas uma forma de comandar a classe a executar o contrutor e devolver o objeto.

O construtor é um menbro da classe, não do objeto ( é um static especial)

Certo. Quando o contrutor é invocado o objeto já existe, já foi construido pela JVM. O nome certo para o contrutor deveria ser “inicializador”, mas o nome “contrutor” é melhor porque remete ao padrão Builder. O objeto já existe (vc pode usar “this”) mas ele não está em um estado consistente. O trabalho do construtor é esse, deixar o objeto em um estado consistente. Existem algumas especificidades como o uso de final em variáveis de instancia que significa que elas devem estar inicializadas quando o construtor acabar ( exactament por causa da consisência)

Em outras linguagens o construtor é mais parecido com um método estático e até é invocado como um, usando um sintaxe como Cliente.new().
No java 8 está sendo previsto que isto também exista em java isto porque a partir do java 8 teremos Functors o que singnifica que todos os métodos das classes podem virar objetos de função ( especilamente os estáticos) e como os construtores não métodos especiais eles também poderão ser transformados em functors ( encapsulados numa nova interface chamada Factory).

Na prática vc pode encarar os construtores como métodos especiais que a jvm invoca ,mas que o prrgrama não pode invocar diretamente. O new é a forma de vc comandar a jvm a invocar o construtor.

dntalemao

Excelente! Clareou muito aqui, valeu mesmo galera!

Criado 3 de setembro de 2012
Ultima resposta 4 de set. de 2012
Respostas 8
Participantes 6