[color=“blue”]Oi pessoal !!! Estava lendo no livro Core Java sobre construtores, mais não entendi a nessecidade dos mesmos… eu não poderia simplesmente instanciar objetos e inicializar variáveis no próprio main ? :idea:
Se eu entendi bem, a vantagem disso é que você pode separar os objetos que serão inicializados em construtores diferentes para que não seja necessário iniciar todos de uma vez… é isso ? :roll:
“VM, quando eu solicitar uma instancia nova dessa classe, quero que voce execute as tais linhas de codigo no momento do instanciamento”…
Construtores podem ser usados para iniciar variaveis com valores defaults, ou qualquer outro tipo de acao que voce pode fazer em metodos normais. Porem, nao eh comum nem muico aconselhavel deixar a logica no construtor, ao menos que voce tenha um otimo motivo para isso.
a propriedade “nome” da classe tera como valor padrao a string “Sem nome”…
Claro que nada impede de voce setar o valor das variaveis em qualquer outra parte do codigo… o Construtor seria uma forma conveniente de fazer determinadas cosias "automaticamente’ no momento da cricao da classe.
Rafael
Diogenes
Cara, os construtores simplificam em muito as coisas…
Você pode ter objetos prontos para serem utilizados logo após a sua instanciação…
Sem falar que eu ganharia muito mais com isso… :lol: :lol: :lol:
E
EddiE
Diogenes, seu exemplo está certo mas prefiro dizer que os valores passados ao construtor devem ser de inicialização do objeto (como seu comportamento) e de variáveis. Substituir setters usando o construtor não é uma boa prática.
S
skyblue
[color=“blue”]Oi pessoal !!! Valeu pelas dicas, mas acho que isso aí que você disse Diógenes viola o encapsulamento dos objetos… ou mesmo atributos. :?:
hehhe, você resolve um problema mais pelo que percebi provoca outro, mais de qualquer jeito valeu pelas dicas… ja deu pra ter uma idéia de como posso utilizar os contructors… :roll:
Valeu pessoal !!!
SkyBlue[/color]
Diogenes
Engraçado…Nunca ouví falar que seria uma má pratica fazer isso…é tão comum encontrar isso em outros códigos…
Mas agora a dúvida é minha…Pq seria uma má prática???
Seria isso q o Rafael citou???
dreamspeaker
Não acho que isso viola o encapsulamento. Vc poderia violar se criasse atributos publicos. Isso parece ser só uma má prática, só que confesso que já utilizei essa “má prática” algumas vezes.
Uma dessas situações foi quando precisei criar uma classe para um objeto que por determinado motivo não poderia ser alterado depois de instanciado, ou seja, a classe não teria setters. Nesse caso, o proprio construtor tratava de popular os atributos do objeto.
E
EddiE
Como o nome diz o construtor deve servir para construir as propriedades básicas e iniciais de um objeto.
Usar métodos set e get realmente podem dar preguiça para escrever e usar, mas fica muito mais fácil para quem recebe apenas o .class e a documentação da sua classe. Para você que vai desenvolver a classe fica mais fácil e organizado para validar o que está entrando e saindo do objeto além de facilitar a divulgação de uma exceção específica para aquele caso em especial.
é isso mesmo galera! perguntar e trocar experiência é inteligência
E
EddiE
geralmente os livros usam este tipo de construção para facilitar o exemplo e o código ficar compacto.
Diogenes
Ok!
A partir de hoje getters e setters são meus amiguinhos!!!
Valeu galera!
R
rlicciardo
Acredito que a criação dos construtores parametrizados são muito úteis, mas pelo que vi no exemplo acima, uma coisa não substitui a outra: inclusive o construtor pode estar fazendo chamadas aos setters e getters respectivos, fazendo eventuais validações em um só lugar.
Mas uma dúvida: em Java é permitido um contrutor encaminhar chamadas a outro?
caiofilipini
"rlicciardo":
Mas uma dúvida: em Java é permitido um contrutor encaminhar chamadas a outro?
Sim. Você pode chamar tanto outros construtores da própria classe, como construtores da superclasse. Isso é feito dessa maneira:
publicclassSpecialBaseextendsBase{privateStringthirdOne;publicSpecialBase(Stringthird){super();// chama construtor sem argumentos da superclassethis.thirdOne=third;}}
É isso aí! Espero que tenha ficado claro... :wink:
[]'s
R
rlicciardo
tento fazer isso e obtenho um erro estranho de token.