Construtores afinal de contas são ou não são metodos?

23 respostas
S

Pessoal estou a estudar para SCJP, mas o bug é o seguinte eu estudo de varios livros e tutoriais e quando estava a solidificar e aprofundar a base sobre construtores me deparei que em alguns livros ou tutoriais dizem que construtores não são metodos, e noutros dizem que são metodos especiais.
eu fiquei confuso e gostaria de saber a vossa opinião???

23 Respostas

erico_kl

construtores são métodos sim… que são chamados na hora de criar um objeto…
o que diferencia dos métodos ‘normais’ é que construtores são métodos que não possuem retorno, devem ter o mesmo nome da classse etc…

http://www.portaljava.com/jnuke/bin/articles/view?id=173_Dicas_sobre_construtores

xjunior

mano, como nosso amigo aí em cima disse, construtor é método sim… só que ele é chamado na hora que vc instância a classe, ok?

Marky.Vasconcelos

Sei lá… nunca pensei nele como um método… acredito que métodos podem ser chamados a qualquer momento em um objeto e construtores são chamados apenas na instanciação.

S

O Problema não é esse, eu sei muito bem o que são construtores , mas o problema esta no seguinte:

tem livros que dizem que são metodos e tem outros que dizem que não são
na hora da minha prova scjp se sair uma pergunta para dizer se são metodos ou não ,não sei o que dizer.
eu quero o maximo de opinoões possiveis e se possivel com links , para de uma vez por todas ter isso bem esclarecido se são ou não metodos

slompo

http://www.guj.com.br/posts/list/83090.java
:wink:

S

pelo que eu li ai http://www.portaljava.com/jnuke/bin/articles/view?id=173_Dicas_sobre_construtores entendi que não são metodos, .
Por exemplo os blocos de inicialização tambem não são metodos eu axo que construtor tambem não é metodo

L

http://www.guj.com.br/posts/list/15/83090.java

slompo

fpavao:
- O construtor não é herdado, mesmo sendo public…

  • O construtor não pode usar alguns modificadores que se aplicam a métodos…como final
  • O construtor não possui retorno
  • etc…

Portanto, não vejo sentido em dizer que é um método, independente do modo que a JVM trata, afinal método especial não é método, é método especial…rssss

Agora, na minha opinião, histórinha é dizer que o contrutor é um método usado para inicializar o objeto, como já ouvi muito por ai,… contrutor é construtor… nos docs da sun é comum ver "…The declaration for a method or a constructor ", ou seja, conceitos diferentes…

Essa e outras explicações podem ser encontradas no Link

http://www.guj.com.br/posts/list/83090.java

sergiotaborda

erico_kl:
construtores são métodos sim… que são chamados na hora de criar um objeto…
o que diferencia dos métodos ‘normais’ é que construtores são métodos que não possuem retorno, devem ter o mesmo nome da classse etc…

http://www.portaljava.com/jnuke/bin/articles/view?id=173_Dicas_sobre_construtores

Eu não acredito nisto. É incrivel ver tanta gente afirmar que construtores são métodos.

Construtores não são métodos.

Algumas diferenças que provam que não são. Construtores não têm retorno, nem mesmo void.
Não é possível invocar construtores como se faz com o métodos. Ou seja, objecto.construtor() não existe.

Para a prova : construtores são membros da classe, mas não são métodos.

thiago.correa

sergiotaborda:
erico_kl:
construtores são métodos sim… que são chamados na hora de criar um objeto…
o que diferencia dos métodos ‘normais’ é que construtores são métodos que não possuem retorno, devem ter o mesmo nome da classse etc…

http://www.portaljava.com/jnuke/bin/articles/view?id=173_Dicas_sobre_construtores

Eu não acredito nisto. É incrivel ver tanta gente afirmar que construtores são métodos.

Construtores não são métodos.

Algumas diferenças que provam que não são. Construtores não têm retorno, nem mesmo void.
Não é possível invocar construtores como se faz com o métodos. Ou seja, objecto.construtor() não existe.

Para a prova : construtores são membros da classe, mas não são métodos.

i++

E para finalizar, se construtor fosse método, ele não se chamaria construtor!! Alguns chamam de “métodos especiais”, acho que é mais para facilitar o entendimento da sua função.

tinorberto

Na minha opnião, para ser método deve ter um tipo de retorno, deve ter pelo menos um voi. Como construtores não possuem logo não são metodos.

steniobh

Para ser metodo teria que ter pelomenos um void, e de que vale um metodo se não pode ser chamado, construtor é construtor metodo é metodo, são duas coisas diferentes, com nomes diferentes.

ari_cesar

Para tirar qualquer tipo de dúvida, de uma olhada nos PDFs que tratam sobre SCJP 1.5 ou 1.6 ( mais exatamente no capitulo 2 que tem cerca de 7 páginas falando sobre contrutores). Com certeza a tua dúvida será encontrada por lá.

erico_kl

sergiotaborda:
erico_kl:
construtores são métodos sim… que são chamados na hora de criar um objeto…
o que diferencia dos métodos ‘normais’ é que construtores são métodos que não possuem retorno, devem ter o mesmo nome da classse etc…

http://www.portaljava.com/jnuke/bin/articles/view?id=173_Dicas_sobre_construtores

Eu não acredito nisto. É incrivel ver tanta gente afirmar que construtores são métodos.

Construtores não são métodos.

Algumas diferenças que provam que não são. Construtores não têm retorno, nem mesmo void.
Não é possível invocar construtores como se faz com o métodos. Ou seja, objecto.construtor() não existe.

Para a prova : construtores são membros da classe, mas não são métodos.


posso estar errado então… mas não sou o único:

Este chama de pseudo-método: http://www.dca.fee.unicamp.br/cursos/PooJava/metodos/construtor.html
Este afirma que é método no próprio título: http://www.tiexpert.net/programacao/java/metodo-construtor.php
Este fala que são métodos especiais: http://www.dm.ufscar.br/~waldeck/curso/java/part27.html
Outro: http://fdomingos.blogs.sapo.pt/3817.html
E ainda pra quem tiver o livro Core Java, Volume 1, sétima edição olhe na parte inferior da página 62: “Há uma importante diferença entre os construtores e os OUTROS métodos…”

S

é assim pessoal na minha humilde opinião e quase certeza eu axo que não são metodos, mas nos livros quando explicam construtores se referem a metodos para facilitar o entendimento dos leitores, mas sempre avisam ou que não são metodos normais ou que não são metodos. é tipo os blocos de inicialização eles tambem não são metodos

sergiotaborda

erico_kl:
sergiotaborda:
erico_kl:
construtores são métodos sim… que são chamados na hora de criar um objeto…
o que diferencia dos métodos ‘normais’ é que construtores são métodos que não possuem retorno, devem ter o mesmo nome da classse etc…

http://www.portaljava.com/jnuke/bin/articles/view?id=173_Dicas_sobre_construtores

Eu não acredito nisto. É incrivel ver tanta gente afirmar que construtores são métodos.

Construtores não são métodos.

Algumas diferenças que provam que não são. Construtores não têm retorno, nem mesmo void.
Não é possível invocar construtores como se faz com o métodos. Ou seja, objecto.construtor() não existe.

Para a prova : construtores são membros da classe, mas não são métodos.


posso estar errado então… mas não sou o único:

Este chama de pseudo-método: http://www.dca.fee.unicamp.br/cursos/PooJava/metodos/construtor.html
Este afirma que é método no próprio título: http://www.tiexpert.net/programacao/java/metodo-construtor.php
Este fala que são métodos especiais: http://www.dm.ufscar.br/~waldeck/curso/java/part27.html
Outro: http://fdomingos.blogs.sapo.pt/3817.html
E ainda pra quem tiver o livro Core Java, Volume 1, sétima edição olhe na parte inferior da página 62: “Há uma importante diferença entre os construtores e os OUTROS métodos…”

Humm… argumento de volume não são convicentes. Veja, tem muita gente que acredita em ET, tem alguns até que acreditam em intra-terrestres , alguns acham que Hitler foi um heroi, alguns acham que Java é lento.
Mitos. Mitos são muito faceis de espalhar porque apelam à incompreenção. Se algum lhe fala algo e vc não consegue negar, vc aceita.

Vc está enganado. Oficialmente construtores não são métodos. Método é um membro da classe que é acessivel pelos objectos. construtor é um membro da classe que é só é acessível pela JVM. Na api de reflecção vc vê que tem um tipo Constructor e um tipo Method e Constructor não herda de Method. Pq ? Porque Construtor não é um Metodo.

O fato de ter muitas cabecinhas pensando errado não o torna certo. O que conta é a ciencia da coisa que no caso é a Especificação Java. não é uma questão de opinião.

S

eu como meretissimo que abri o topico ja tomei a decisão :slight_smile:
assunto encerrado, construtores não são metodos
:slight_smile: :smiley:

A

Sergio, no post http://www.guj.com.br/posts/list/83090.java você escreveu:

sergiotaborda:
Thiago Domingues:
Galera, como todo bom usuário do fórum dei uma pesquisada antes de postar. A questão é a seguinte:

Construtor é um método ou não?

Classes têm membros. Existem dois tipos de membros: os que contêm informação e os que processam informação.
Os primeiros são chamados atributos, ou segundos são chamados metodos.
O construtor é portanto um método porque processa informação.

Agora a pergunta: todos os metodos têm as mesmas regras ?
Não.

Metodos estáticos tem regras diferentes dos não-estáticos e dos metodos construtores no que toca a herança ,a retorno e à propria forma de invocação. Contudo, todos são métodos.

A sua pergunta “Contrutor é metodo?” tem uma resposta simples : sim.
Mas aquilo que vc quer perguntar “Construtor tem as mesmas propriedades que os metodos comuns?” tem uma resposta menos simples: não

O que te fez mudar de opiniao ?

erico_kl

sergiotaborda:
erico_kl:
sergiotaborda:
erico_kl:
construtores são métodos sim… que são chamados na hora de criar um objeto…
o que diferencia dos métodos ‘normais’ é que construtores são métodos que não possuem retorno, devem ter o mesmo nome da classse etc…

http://www.portaljava.com/jnuke/bin/articles/view?id=173_Dicas_sobre_construtores

Eu não acredito nisto. É incrivel ver tanta gente afirmar que construtores são métodos.

Construtores não são métodos.

Algumas diferenças que provam que não são. Construtores não têm retorno, nem mesmo void.
Não é possível invocar construtores como se faz com o métodos. Ou seja, objecto.construtor() não existe.

Para a prova : construtores são membros da classe, mas não são métodos.


posso estar errado então… mas não sou o único:

Este chama de pseudo-método: http://www.dca.fee.unicamp.br/cursos/PooJava/metodos/construtor.html
Este afirma que é método no próprio título: http://www.tiexpert.net/programacao/java/metodo-construtor.php
Este fala que são métodos especiais: http://www.dm.ufscar.br/~waldeck/curso/java/part27.html
Outro: http://fdomingos.blogs.sapo.pt/3817.html
E ainda pra quem tiver o livro Core Java, Volume 1, sétima edição olhe na parte inferior da página 62: “Há uma importante diferença entre os construtores e os OUTROS métodos…”

Humm… argumento de volume não são convicentes. Veja, tem muita gente que acredita em ET, tem alguns até que acreditam em intra-terrestres , alguns acham que Hitler foi um heroi, alguns acham que Java é lento.
Mitos. Mitos são muito faceis de espalhar porque apelam à incompreenção. Se algum lhe fala algo e vc não consegue negar, vc aceita.

Vc está enganado. Oficialmente construtores não são métodos. Método é um membro da classe que é acessivel pelos objectos. construtor é um membro da classe que é só é acessível pela JVM. Na api de reflecção vc vê que tem um tipo Constructor e um tipo Method e Constructor não herda de Method. Pq ? Porque Construtor não é um Metodo.

O fato de ter muitas cabecinhas pensando errado não o torna certo. O que conta é a ciencia da coisa que no caso é a Especificação Java. não é uma questão de opinião.


ok ok… não falei que eu estava certo… até pq não sou de teimar alguma coisa que eu não tenho certeza absoluta…
só falei que eu não era a única “cabecinha” que pensava assim…
está bem… construtores não são métodos…
só que muito do pouco que eu sei hoje me baseei no Core Java e se lá afirma que construtores são métodos então posso ter lido vários outros conceitos errados… vai me dizer que existe herança múltipla em java e até hoje eu não sabia??

sergiotaborda

australoptecus:
Sergio, no post http://www.guj.com.br/posts/list/83090.java você escreveu:

sergiotaborda:
Thiago Domingues:
Galera, como todo bom usuário do fórum dei uma pesquisada antes de postar. A questão é a seguinte:

Construtor é um método ou não?

Classes têm membros. Existem dois tipos de membros: os que contêm informação e os que processam informação.
Os primeiros são chamados atributos, ou segundos são chamados metodos.
O construtor é portanto um método porque processa informação.

Agora a pergunta: todos os metodos têm as mesmas regras ?
Não.

Metodos estáticos tem regras diferentes dos não-estáticos e dos metodos construtores no que toca a herança ,a retorno e à propria forma de invocação. Contudo, todos são métodos.

A sua pergunta “Contrutor é metodo?” tem uma resposta simples : sim.
Mas aquilo que vc quer perguntar “Construtor tem as mesmas propriedades que os metodos comuns?” tem uma resposta menos simples: não

O que te fez mudar de opiniao ?

O entendimento da especificação java e ter tido que trabalhar muito com reflection do projeto MiddleHeaven para o motor de injeção e operações a vulso.
Ao mexer com reflection para o projeto eu queria tratar construtores e métodos das mesma forma (ambos são blocos de codigo com argumentos e retorno). Mas depois de um tempo eu “descobri” porque isso não é possível. Eles não são a mesma coisa. São muito semelhantes , mas não são da mesma hierarquia. Em reflection quando vc faz construtor.invoke() vc obtem um objeto da classe do construtor, mas ao fazer metodo.invoke vc obtém o retorno do método.

Mas veja bem, dentro da definição de que classes só tem dois tipos de membros, construtor é mais semelhante a um método que a um construtor. E como muita gente já falou no final de contas são todos funções para a jvm.
Só que a pergunta “Construtor é método?” tem que ser analizada dentro do contexto da especificação e não no contexto dos detalhes internos da JVM. E desse ponto de vista não ha equivoquo. como disse antes, oficialmente, construtor não é método.

O meu erro no post mencionado foi achar que esta pergunta pode ser respondida fora do contexto da especificação.

A

erico_kl:
sergiotaborda:
erico_kl:
sergiotaborda:
erico_kl:
construtores são métodos sim… que são chamados na hora de criar um objeto…
o que diferencia dos métodos ‘normais’ é que construtores são métodos que não possuem retorno, devem ter o mesmo nome da classse etc…

http://www.portaljava.com/jnuke/bin/articles/view?id=173_Dicas_sobre_construtores

Eu não acredito nisto. É incrivel ver tanta gente afirmar que construtores são métodos.

Construtores não são métodos.

Algumas diferenças que provam que não são. Construtores não têm retorno, nem mesmo void.
Não é possível invocar construtores como se faz com o métodos. Ou seja, objecto.construtor() não existe.

Para a prova : construtores são membros da classe, mas não são métodos.


posso estar errado então… mas não sou o único:

Este chama de pseudo-método: http://www.dca.fee.unicamp.br/cursos/PooJava/metodos/construtor.html
Este afirma que é método no próprio título: http://www.tiexpert.net/programacao/java/metodo-construtor.php
Este fala que são métodos especiais: http://www.dm.ufscar.br/~waldeck/curso/java/part27.html
Outro: http://fdomingos.blogs.sapo.pt/3817.html
E ainda pra quem tiver o livro Core Java, Volume 1, sétima edição olhe na parte inferior da página 62: “Há uma importante diferença entre os construtores e os OUTROS métodos…”

Humm… argumento de volume não são convicentes. Veja, tem muita gente que acredita em ET, tem alguns até que acreditam em intra-terrestres , alguns acham que Hitler foi um heroi, alguns acham que Java é lento.
Mitos. Mitos são muito faceis de espalhar porque apelam à incompreenção. Se algum lhe fala algo e vc não consegue negar, vc aceita.

Vc está enganado. Oficialmente construtores não são métodos. Método é um membro da classe que é acessivel pelos objectos. construtor é um membro da classe que é só é acessível pela JVM. Na api de reflecção vc vê que tem um tipo Constructor e um tipo Method e Constructor não herda de Method. Pq ? Porque Construtor não é um Metodo.

O fato de ter muitas cabecinhas pensando errado não o torna certo. O que conta é a ciencia da coisa que no caso é a Especificação Java. não é uma questão de opinião.


ok ok… não falei que eu estava certo… até pq não sou de teimar alguma coisa que eu não tenho certeza absoluta…
só falei que eu não era a única “cabecinha” que pensava assim…
está bem… construtores não são métodos…
só que muito do pouco que eu sei hoje me baseei no Core Java e se lá afirma que construtores são métodos então posso ter lido vários outros conceitos errados… vai me dizer que existe herança múltipla em java e até hoje eu não sabia??

Não se preocupe.
Segundo ele mesmo, ele também não estava certo antes. :slight_smile:

sergiotaborda

erico_kl:

só que muito do pouco que eu sei hoje me baseei no Core Java e se lá afirma que construtores são métodos então posso ter lido vários outros conceitos errados… vai me dizer que existe herança múltipla em java e até hoje eu não sabia??

LOL… depende do que vc quer dizer com “Java”. Na linguagem java não , mas no bytecode (plataforma) sim.
O JavaFX tinha herança múltipla no primeira versão ( porque o byte code permite) mas na versão atual não tem mais. A simplificação foi feita pelas mesmas razões que no java: demasiados problemas podem acontecer e na prática tem pouca utilidade. Mas em tese nada impede que se crie uma linguagem com herança múltipla que roda na plataforma Java.

Não tenho informação se os trait do scala usam esta funcionalidade do bytecode, mas poderiam.

erico_kl

sergiotaborda:
erico_kl:

só que muito do pouco que eu sei hoje me baseei no Core Java e se lá afirma que construtores são métodos então posso ter lido vários outros conceitos errados… vai me dizer que existe herança múltipla em java e até hoje eu não sabia??

LOL… depende do que vc quer dizer com “Java”. Na linguagem java não , mas no bytecode (plataforma) sim.
O JavaFX tinha herança múltipla no primeira versão ( porque o byte code permite) mas na versão atual não tem mais. A simplificação foi feita pelas mesmas razões que no java: demasiados problemas podem acontecer e na prática tem pouca utilidade. Mas em tese nada impede que se crie uma linguagem com herança múltipla que roda na plataforma Java.

Não tenho informação se os trait do scala usam esta funcionalidade do bytecode, mas poderiam.


eu me referia à linguagem… pelo menos foi o que eu aprendi até hoje… a linguagem java não suporta herança múltipla…

Criado 13 de janeiro de 2010
Ultima resposta 14 de jan. de 2010
Respostas 23
Participantes 12