public class Login extends javax.swing.JFrame { 02. private DadosDeConexao dados;
private Conexao conexao;
private void jBotaoOkActionPerformed(java.awt.event.ActionEvent evt) { 06. dados = new DadosDeConexao();
dados.setHost("teste");
dados.setDatabase("teste");
dados.setUser("teste");
dados.setPassword("teste");
conexao = new Conexao(dados);
conexao.iniciarConexao();
}
Observando-se a linha 06: Qual a diferença de ela existir, ou não? Pergunto isso pois o método construtor da classe “DadosDeConexao” não tem nada e código compila das duas formas.
método construtor da classe DadosDeConexao:
public class DadosDeConexao {
public DadosDeConexao() {
}
}
Olha você precisa, fazer o seguinte.
Toda classe que herda de uma outra classe, precisa ter seu próprio construtor e dentro dele o construtor da classe base. Para instanciar o seu objeto utilizando o construtor da classe base você precisa fazer o seguinte:
class Teste extends Testes{
public Teste(){
super(dados);
}
}
Em primeiro lugar, gostaria de solicitar ao wswillian ou aos moderadores a exclusão desse avatar. Esse não é um espaço de manifestação política.
Quanto à linha mencionada, ela é necessária para criar uma instância do objeto. Por mais que o construtor não faça nada, ele aloca memória para o objeto e atribui a sua estrutura básica. Se você não fizer isso, vai receber um NullPointerException quando tentar utilizar o objeto, já que ele será nulo.
É o seguinte, se você excluir a linha 6 do código, ele irá compilar normalmente, mas não irá executar. Ocorrerá um NullPointerException. Isso porque ainda não foi criada a instância do objeto em questão. A chamada de new é responsável por alocar memória e criar a instância do objeto, através da chamada do construtor - não importa se não tem nada dentro do construtor, ou mesmo se você não definiu um construtor.
Se sua variável DadosDeConexao tivesse sido definida dentro do método jBotaoOkActionPerformed, você receberia uma mensagem durante a compilação avisando que sua variável não foi inicializada. Portanto, neste caso, não seria compilável.
Na verdade, no segundo caso, essa linha não é nem opcional, é uma linha inútil, que não deveria estar aí. Você estaria criando uma instância que logo na linha seguinte perderia a referência, podendo ser coletada pelo Garbage Collector. Sacou?