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?
Segundo a apostila da Caelum construtor não é método pois:
Construtor: um método especial?
Um construtor não é um método. Algumas pessoas o chamam de um método especial, mas
definitivamente não é, já que não possui retorno e só é chamado durante a construção do objeto.
As professoras nas aulas de Java sempre falam “Método Construtor…blá blá blá”…
não podemos obrigar ninguem sobre isso se é ou não, mas alguem ae teria algum link da Sun(dela ninguem pode contestar) sobre esse assunto se construtor pode ser considerado um método ou não?
Para a JVM é um método estático especial, cujo nome interno é “<init>”, e é tratado de modo um pouco diferente dos métodos normais.
É para não confundir sua nobre cabecinha que se diz que “construtor não é um método”.
T
Thiago_Domingues
ta, mas nos cursos é passado que ele é um método…
A
andreban
thingol:
Para a JVM é um método estático especial, cujo nome interno é “<init>”, e é tratado de modo um pouco diferente dos métodos normais.
É para não confundir sua nobre cabecinha que se diz que “construtor não é um método”.
Odeio quando usam “mentirinhas” para não confundir nossas cabecinhas…
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…
victorwss1 like
Essa questão gera muita polêmica e não há muito consenso.
Para a linguagem java, os construtores não são métodos. Mas para a JVM os construtores são métodos. :shock:
Outra coisa interessante é que se você tentar usar reflection para obter um construtor que não existe, é lançada a exceção NoSuchMethodException. Não existe uma exceção NoSuchConstructorException.
Omeganosferatu
Depende como é empregado o uso da palavra método, algumas pessoas que trabalham comigo simplesmente chamam os métodos de " função " ( acostumados com outras linguagens ) …
Método é a forma como fazemos alguma coisa… Construtor pode ser considerado um método de se construir um objeto…
Também tive um professor que teve a coragem de perguntar na prova quais os tipos de métodos, e uma das respostas era " método construtor " ele me deu errado na questao… mas enfim … também sou da turma dos que defendem que construtor NÃO É MÉTODO.
Então pela definição da linguagem, como um construtor não é um membro e um método é um membro, deduz-se que um construtor não é um método.
Ou seja: a JVM considera construtores como métodos especiais, mas a definição formal da linguagem diz que construtores e métodos são coisas completamente distintas. Na verdade, e é isso que confunde horrores os principiantes, você pode ter um método com o mesmo nome da classe
A
andreban
Não dá pra discutir que construtores e métodos tem características em comum. São diferentes, mas tem muita coisa em comum. Talvez fosse até possível dizer que existe uma “superclasse” para construtores e métodos, e que os dois seriam especializações dessa classe.
Aí vai mais de entender O QUE cada um está chamando de metodo, se é essa “superclasse” ou se é o método mesmo. Eu costumo chamar tudo de método, mas entendo perfeitamente a diferença entre o construtor e os métodos “normais”. E acho que mais importante do que chamar de uma coisa ou de outra é entender o conceito por trás das duas coisas.
Em tempo, no java.lang.reflect:
public final class Constructor extends AccessibleObject implements Member
public final class Method extends AccessibleObject implements Member
public final class Field extends AccessibleObject implements Member
felipemartinsss
Na minha opinião era um método, agora fiquei na dúvida.
Mas era um método restrito. Onde a restrição básica é ter o nome da classe, não retornar valor e ser executado na criação do objeto. Qdo aprendemos sobre orientação a objetos de forma teórica também é mostrado que um objeto encapsula informações, tais informações são divididas em métodos e atributos. E os métodos dão acessos aos atributos. Pensando assim eu diria que o construtor é um método.
Mas olhando no site da Sun, parece que no Java são diferenciados. Mas isso é assim em outras linguagens orientadas a objeto tbm?
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
peczenyj
O bloco estático é um método?
Paulo_Silveira
construtor não é um método: nao é herdado, nao pode ser chamado duas vezes, nao existe invocacao virtual etc,
mas como o thingol falou, internamente, na JVM, ele é tratado como um metodo especial, sem essas caracteristicas que citei. mas isso pouco importa… o que importa eh a JLS, e pra JLS construtor não é um metodo.
Luiz_Aguiar
Até porque em outras VMs ele pode não ser tratato como um método especial, pode ser tratato como um construtor rs, mas para a linguagem não é método, como já citado.
LPJava
acho que como a JVM acha, trata sobre o construtor pouco importa a nivel de programacao para o desenvolvedor e sim ele saber que ele nao é um metodo e pq nao né…
Isso sim é essencial… se for analisar como a JVM trata cada coisa… o bicho pega…
el_loko
Contrutor pra mim não é exatamente um “Método”…
Depende muito da definição da palavra método.
Mais a quem diga que é…
sergiotaborda
o bloco estático não é um membro
sergiotaborda
Paulo Silveira:
construtor não é um método: nao é herdado, nao pode ser chamado duas vezes, nao existe invocacao virtual etc,
Por essa logica um método estático tb não seria um metodo já que ele não pode ser herdado.
(não entendi o que significa “ser chamado duas vezes” )
T
Thiago_Domingues
Quando resolvi colocar esse tópico sabia q ia gerar grande polêmica entre nós usuários.
Só respondendo o nosso amigo THINGOL não creio que usuários do GUJ tenham essas tais “cabecinhas” que possam ser enganadas.
GUJ é um fórum de pessoas interessadas em Java e qualquer questão conceitual acho que é bem vinda. Mudei minha opinião sobre construtor. Pra mim construtor não é método, seguindo o conceito da Sun. Mas a opinião de cada um deve ser respeitada.
Mauricio_Linhares
Em outras VMs ele teria que ser tratado exatamente do mesmo jeito, senão essa vm não seria compatível com a JVM
victorwss
Quanto ao bloco estático, a história é a mesma do construtor.
Na linguagem Java, o bloco estático não é um método. Mas para JVM ele é um método especial estático chamado “<clinit>”, sem parâmetros e com retorno void.
Da mesma forma o construtor, para a JVM se torna um método estático especial chamado “<init>” com retorno void também.
discorpio
Boa tarde a todos.
Para dissipar algumas dúvidas e polêmicas sobre Método Construtor não ser método, então ai vai a definição do significado da palavra “Método”.
De acordo com o especificado no ítem 4 do enunciado acima, se um construtor de uma classe é considerado um procedimento, um algoritimo, função ou ação que responde a certas mensagens (provocados pelo usuário ou pelo sistema), então o Construtor de uma Classe é um Método.
Além disso, métodos tem certas peculiaridades como fazer sobreescrita ou sobrecarga dos mesmos, se o método construtor permite voce fazer isso, então definitivamente o Construtor de uma Classe é um Método.
M
marcobiscaro2112
discorpio:
De acordo com o especificado no ítem 4 do enunciado acima, se um construtor de uma classe é considerado um procedimento, um algoritimo, função ou ação que responde a certas mensagens (provocados pelo usuário ou pelo sistema), então o Construtor de uma Classe é um Método.
Além disso, métodos tem certas peculiaridades como fazer sobreescrita ou sobrecarga dos mesmos, se o método construtor permite voce fazer isso, então definitivamente o Construtor de uma Classe é um Método.
Não, não é. Construtor sequer é um membro da classe (ao contrário dos métodos). Basta se aprofundar um pouco em reflection que isso fica extremamente claro.
Fora tudo que já disseram (que o construtor não permite ser herdado, o método sim; que o construtor não permite modificador final, o método sim; que o construtor não pode ser chamado de um método de instância da própria classe, o método sim), a especificação da linguagem Java é bem clara:
Além disso, em reflection Constructor não herda de Method (o que implica que ele não é um).
luistiagos
Ontem fiz uma prova de concurso publico para o parana previdencia. Uma das questões abordava exatamente isto.
Porem temos opiniões muito distintas, não existe uma informação oficial a respeito disto na especificação da linguagem e muito menos em alguma literatura clássica
para mim como para muitos construtores não são métodos pois o mesmo tem propriedades diferentes que métodos. Já para outros são. Como este assunto é algo que se trata de ponto de vista não acho que o mesmo deveria existir em uma questão de concurso. Será que adianta entrar com pedido protocolado de anulação de questão? Ou é perca de tempo?
B
Bruno_Laturner
Entre caso tenha sido prejudicado, e se esta questão vai fazer diferença no teu ranking.
sergiotaborda
luistiagos:
Ontem fiz uma prova de concurso publico para o parana previdencia. Uma das questões abordava exatamente isto.
Porem temos opiniões muito distintas, não existe uma informação oficial a respeito disto na especificação da linguagem e muito menos em alguma literatura clássica
para mim como para muitos construtores não são métodos pois o mesmo tem propriedades diferentes que métodos. Já para outros são. Como este assunto é algo que se trata de ponto de vista não acho que o mesmo deveria existir em uma questão de concurso. Será que adianta entrar com pedido protocolado de anulação de questão? Ou é perca de tempo?
Vários anos depois … eis uma ideia muito louca.
Um construtor não é um método porque a classe Constructor não herda de Method
(constructor e method são classes de reflection )
Agora, se isso será aceite como prova… não sei. Para mim não é controverso. Basta ver que a estrutura de um construtor não é a de um método ( não tem retorno) ,mas entendo que ha dois legumes nessa faca.
rafadelnero
sergiotaborda:
luistiagos:
Ontem fiz uma prova de concurso publico para o parana previdencia. Uma das questões abordava exatamente isto.
Porem temos opiniões muito distintas, não existe uma informação oficial a respeito disto na especificação da linguagem e muito menos em alguma literatura clássica
para mim como para muitos construtores não são métodos pois o mesmo tem propriedades diferentes que métodos. Já para outros são. Como este assunto é algo que se trata de ponto de vista não acho que o mesmo deveria existir em uma questão de concurso. Será que adianta entrar com pedido protocolado de anulação de questão? Ou é perca de tempo?
Vários anos depois … eis uma ideia muito louca.
Um construtor não é um método porque a classe Constructor não herda de Method
(constructor e method são classes de reflection )
Agora, se isso será aceite como prova… não sei. Para mim não é controverso. Basta ver que a estrutura de um construtor não é a de um método ( não tem retorno) ,mas entendo que ha dois legumes nessa faca.
Acho que isso pode definir que o construtor realmente não é um método. No livro da Deitel e da Kathy Sierra eles também afirmam que construtor não é método pois não tem retorno.
maior_abandonado
luistiagos:
Ontem fiz uma prova de concurso publico para o parana previdencia. Uma das questões abordava exatamente isto.
Porem temos opiniões muito distintas, não existe uma informação oficial a respeito disto na especificação da linguagem e muito menos em alguma literatura clássica
para mim como para muitos construtores não são métodos pois o mesmo tem propriedades diferentes que métodos. Já para outros são. Como este assunto é algo que se trata de ponto de vista não acho que o mesmo deveria existir em uma questão de concurso. Será que adianta entrar com pedido protocolado de anulação de questão? Ou é perca de tempo?
honetamente achoque você poderia pedir para anular se “for vantajoso” (se a resposta escolhida como correta não foi a que você marcou), mas considero que essa questão nem deveria ter…
luistiagos
Na verdade nem vou esquentar a cabeça com isto… Uma questão a mais ou a menos não faz muita diferença.
Porem o que me impressiona e como estas provas de concursos são mal elaboradas sem sequer revisões. O que mais me impressionou nesta prova foi a quantidade de questões de direito. Na parte de conhecimentos gerais tinham 10 questões de direito e na parte de conhecimento especificos mais 10 questões de direto, em base apenas teve 10 questões ligadas a tecnologia sendo 5 de governança em TI. Ou seja se um advogado fizesse esta prova ele teria bem mais chance do que um profissional de TI. Chego até pensar o que eles queriam um advogado que sabe um pouco de TI ou alguém realmente de TI? Este tipo de coisa que é revoltante nesses concursos. Se querem um advogado que coloquem no edital vaga para advogado com noções de governança em TI.
WellingtonRamos
luistiagos:
Ontem fiz uma prova de concurso publico para o parana previdencia. Uma das questões abordava exatamente isto.
Porem temos opiniões muito distintas, não existe uma informação oficial a respeito disto na especificação da linguagem e muito menos em alguma literatura clássica
para mim como para muitos construtores não são métodos pois o mesmo tem propriedades diferentes que métodos. Já para outros são. Como este assunto é algo que se trata de ponto de vista não acho que o mesmo deveria existir em uma questão de concurso. Será que adianta entrar com pedido protocolado de anulação de questão? Ou é perca de tempo?
Você pode protocolar sim, porém, neste caso é necessário verificar se essa informação existe nas referências bibliográficas aplicadas à prova. Se nelas não contiver a informação, sim, você pode. Caso contrário, vale o que está lá (mesmo não concordando) daí você terá que contra-argumentar expondo seu ponto de vista (preferencialmente citando referências bibliográficas).