Eu fui seco achando q a resposta era printar o resultado 2 … pois a resposta certa é não compila
Abri o netbeans pra ver c era verdade… e realmente naum compilou…dando “cannot find symbol”
Mas como isso ???
Juro q naum entendi nada…como ele naum encontra ??? pq naum compila ???
pq this(2); ??? o test(2); naum seria o mesmo resultado ??
Muito Obrigado
Ricardo
g4j
Não não…
Dentro do construtor o objeto ainda não está criado
vc poderia ter feito algo assim:
test(){newtest(2);}
Algo totalmente sem sentido, mas compila. Você estaria criando um novo objeto test dentro do contrutor da propria classe test :shock:
ricardo13
olá g4j,
Mais uma vez obrigado por esclarecer minha dúvida…é…tem razão … o objeto naum foi criado ainda…o correto era usar o this
Obrigado…vou estudar isso…daki uns meses vou fazer a prova SCJP
Ricardo
michelantunes
O construtor é um método que é acessado quando instanciamos um objeto.
Para usar outro construtor dentro de qualquer outro, você deve usar a sobrecarga com o this que referencia a classe e obviamente o seu(s) respectivo(s) construtores.
Isso existe porque você não pode ter dois construtores com a mesma assinatura.
Esse é o padrão.
Abs,
Giulliano
pra vc estudar mais um pouquinho sobre os construtores…tente acertar a saída desse programa:
publicclassTeste{Teste(){super();System.out.println("construtor padrão");}Teste(Integerum){this();System.out.println("construtor com um argumento");}Teste(Integerum,Integerdois){this(um);System.out.println("construtor com dois argumentos");}publicstaticvoidmain(String[]args){newTeste(1,2);}}
ricardo13
olá pra galera,
Obrigado pelo monte de ajuda e até um teste…kkkkkkkkk
bom…pelo oq eu estudei até agora…e meu cerébro compilador permite executar é
Output:
construtor padrão
construtor com argumento
construtor com dois argumentos
ta certo ??
Ricardo
Giulliano
sim senhor…está correto. Construtores dá uma certa dor de cabeça se não prestar atenção…estude as possíveis maneiras de construir um objeto sem erros…
publicclassTeste{Teste(Integerum){this();System.out.println("construtor com um argumento");}Teste(Integerum,Integerdois){this(um);System.out.println("construtor com dois argumentos");}publicstaticvoidmain(String[]args){newTeste(1,2);}}
Se alterarmos já não funciona mais…
ricardo13
olá,
ah sim…naum tem o construtor sem argumentos dai daria erro de compilação…a se as questões da prova fosse desse nível
eu axo q me daria bem…eu axo !!!
kkkkkkkkkkkkk
um abraço e parabens à comunidade …prontificou a me ajudar em poucos minutos
Abraço e t+
Ricardo
ivandasilva
Aí pessoal, o burrico da turma aqui não entendeu :oops: , alguém poderia me explicar…
Para mim o resultado seria: construtor padrão.
Desde já, muito obrigado !
ricardo13
olá cara,
Se for assim eu tb sou, pq eu naum sabia.
Mas é o seguinte … naum pode chamar um construtor de dentro de outro construtor com o nome da classe …vc só pode através da palavra-chave this().
é isso…
Relebrando: Nunca chame um método construtor de dentro de outro construtor somente pelo nome…só referencia com a palavra this.
QQ dúvida é só postar
Ricardo
Rodrigo_de_Mello
Ola pessoal, bom dia!
Tenho uma dúvida quanto a chamada do super no código abaixo, não esta errado?, ou seja, quando utilizo o super estou invocando a construtor da minha classe pai, correto?
publicclassTeste{Teste(){super();System.out.println("construtor padrão");}Teste(Integerum){this();System.out.println("construtor com um argumento");}Teste(Integerum,Integerdois){this(um);System.out.println("construtor com dois argumentos");}publicstaticvoidmain(String[]args){newTeste(1,2);}}
Agradeço as explicações, obrigado!
ricardo13
olá Rodrigo,
sim…a chamada super() está relacionado a classe PAI.
Ali no código ele vai chamar o PAI da classe Teste … q é a classe OBJECT …
ali simplesmente ta explicito a chamada super() … caso ele naum colocasse o compilador insere para vc implicitamente.
Debaixo de todo método construtor, caso vc naum coloke, o compilador coloca o super() pra vc.
Lembrando que se colocar super() naum pode colocar this() ou vice-versa.
Ricardo
ivandasilva
ricardo13, esta parte eu entendi, o que eu não entendi foi a resposta da questão que o Giulliano passou…
Muito obrigado !!
ricardo13
olá,
mas qual dos exemplos … o 1º ou o 2º ???
Ricardo
ivandasilva
Segue abaixo:
publicclassTeste{Teste(){super();System.out.println("construtor padrão");}Teste(Integerum){this();System.out.println("construtor com um argumento");}Teste(Integerum,Integerdois){this(um);System.out.println("construtor com dois argumentos");}publicstaticvoidmain(String[]args){newTeste(1,2);}}
ricardo13
olá
A sequencia da execução do programa é dado na frente de cada linha de código:
public class Teste{
Teste(){super();//4 -> como o pai de Teste é a classe Object System.out.println("construtor padrão");//5}Teste(Integerum){this();//3System.out.println("construtor com um argumento");//6}Teste(Integerum,Integerdois){this(um);//2System.out.println("construtor com dois argumentos");//7}publicstaticvoidmain(String[]args){newTeste(1,2);//1}
}
Entendeu ??? qq coisa é só postar
Ricardo
Rodrigo_de_Mello
Ah sim. Legal.
Vlw Ricardo!!! Obrigado pela explicação.
Abs,
ricardo13
olá,
q isso…precisar estamos ae
Ricardo
ivandasilva
Velho, agora eu entendi…
Muitíssimoobrigado!!:lol:
peerless
Que mock eh esse, Test Killer?
rodrigo.ferreira
Exatamente… cada construtor precisa chamar o construtor da sua super classe, até chegar na classe Object (aonde a herança acaba). Se isso não acontecer (você pode testar tentando chamar um construtor e outro, recursivamente), haverá um erro em tempo de exeução (StackOverflowError), pois o restante do código do construtor filho não será executado até que todos os seus super-construtores tenham terminado sua execução.
Até.
ricardo13
olá,
Respondendo ao peerless, eu achei essa questão no Inquisition.
Quando errei essa questão eu logo fui atrás do erro.