Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Uso do metodo membro não estatico

Porque devemos deixar o metodo Estatico, para que possamos usa-lo no construtor

![])Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas
solução!

Olá, Adonis

A sua pergunta é muito interessante e comum entre quem está aprendendo Java. Vamos lá!

Quando você tenta usar um método não estático (ou seja, um método membro) dentro do construtor de uma classe, o compilador Java reclama. Isso acontece porque o método membro depende de uma instância da classe para ser executado, e essa instância ainda não está completamente construída no momento da execução do construtor.

Por outro lado, um método estático não depende de uma instância da classe para ser executado, ele pertence à classe em si e não a uma instância específica da classe. Portanto, você pode usá-lo dentro do construtor sem problemas.

Vamos a um exemplo prático para ilustrar isso:

public class Teste {
    private int valor;
    
    public Teste() {
        valor = metodoEstatico(); // Isso é permitido
        valor = metodoMembro(); // Isso causará um erro de compilação
    }
    
    public static int metodoEstatico() {
        return 1;
    }
    
    public int metodoMembro() {
        return 2;
    }
}

No exemplo acima, o método metodoEstatico() pode ser chamado dentro do construtor porque é um método estático. Já o método metodoMembro(), que é um método não estático, não pode ser chamado dentro do construtor, pois a instância da classe Teste ainda não está completamente construída nesse ponto.

Espero ter ajudado e bons estudos!

Olá, Adonis!

A sua pergunta é bem interessante. O uso de métodos estáticos e não estáticos em construtores pode ser um pouco confuso no início, mas vou tentar te ajudar a entender.

A razão pela qual você pode usar um método estático em um construtor, mas não um método não estático (ou método de instância), está relacionada à ordem em que os objetos são criados em Java.

Quando você cria um objeto em Java, o construtor da classe é chamado. Durante a execução do construtor, o objeto ainda está sendo inicializado. Até que o construtor termine de executar, o objeto pode não estar em um estado onde todos os seus campos foram inicializados e todos os seus métodos de instância podem ser chamados com segurança.

Por outro lado, um método estático não depende de qualquer estado de objeto específico para ser executado, pois pertence à classe como um todo, e não a uma instância específica da classe. Portanto, você pode chamá-lo em um construtor, porque ele não depende do estado do objeto que está sendo criado.

Vou te dar um exemplo para ilustrar isso:

public class Exemplo {

    private String campo;

    public Exemplo() {
        this.campo = metodoEstatico();  // Isso é permitido
        this.campo = metodoNaoEstatico();  // Isso NÃO é permitido
    }

    public static String metodoEstatico() {
        return "Olá, sou um método estático!";
    }

    public String metodoNaoEstatico() {
        return "Olá, sou um método não estático!";
    }
}

Nesse exemplo, a chamada para metodoEstatico() no construtor é permitida, porque metodoEstatico() é um método estático e não depende do estado do objeto Exemplo. No entanto, a chamada para metodoNaoEstatico() não é permitida, porque metodoNaoEstatico() é um método de instância que pode depender do estado do objeto Exemplo, que ainda não foi totalmente inicializado.

Espero que essa explicação tenha esclarecido a sua dúvida. Espero ter ajudado e bons estudos!

Agradeço a ajuda Pssual

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software