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

O método só funciona se for estático

O método apresentado na resolução da questão só compila se for declarado como static. Após verificar a resolução da questão, testei este método de várias formas diferentes e ele só compilava se fosse declarado como static.

Para conseguir fazer o código rodar, tive que escrever um código bem simples, para exemplificar:

public class Palavra {

    public static void imprimeLetraPorLetra(String texto) {
        for (int i = 0; i < texto.length(); i++) {
            System.out.println(texto.charAt(i));
        }
    }

    public static void main(String[] args) {
        imprimeLetraPorLetra("Alura");
    }
}

Porém o código apresentado como resolução da questão não era estático. Gostaria de entender, na verdade, porque o método deposita da classe Conta roda normalmente no main, sem precisar ser declarado como estático, enquanto este método imprimeLetraPorLetra precisa ser declarado como estático para poder rodar.

4 respostas
solução!

Fala aí Natan tudo bem?

No caso do método imprimeLetraPorLetra ele deve ser estático pois você não tem nenhuma instancia da classe Palavra (no caso).

Métodos estáticos são métodos que podem ser executado diretamente a partir da classe ou seja sem nenhuma instancia de objeto.

Métodos não estáticos precisamos de uma instancia para poder invoca-los.

Faça o seguinte teste remova a declaração static do método imprimeLetraPorLetra e deixe seu método main assim:

 public static void main(String[] args) {
    Palavra palavra = new Palavra();    
        palavra.imprimeLetraPorLetra("Alura");
 }

Você vai ver que isso vai funcionar, pois como o método agora não é mais static precisamos de uma instancia da classe para utiliza-lo.

Obrigado Fernando pela explicação bastante esclarecedora!

Estava me atrapalhando aqui com algo bastante simples, obrigado por ter me ajudado!

De nada =)

package br.com.empresa.banco.conta;

public class Palavra {
    String AAA;



    public void imprimeLetraPorLetra(String texto) {
        for (int i = 0; i < texto.length(); i++) {
            System.out.println(texto.charAt(i));
        }
    }
}