Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

"Não pode fazer referência de não static em uma static"

public class
{
    int x=4;

    void mostraNumero(int n)
    {
        System.out.println(n);
    }

    public static void main(String [] args)
    {
        System.out.println(x);    //erro pois x está fora
        mostraNumero(4);        //erro, apesar do 4 valer o método não pode ser usado
    }
}

A famosa frase: "Cannot make a static reference to the non-static field".

Já entendi em parte que não pode usar algo não estático fora do bloco estático. Mas por que isso exatamente?

E geralmente contorno esse problema criando outra classe e instanciando a classe dentro do "static main", mas teria como eu criar um método (não estático) na classe e utilizar ele?

1 resposta
solução!

Qualquer membro estático de uma classe não requer que seja instanciado um objeto daquela classe para ser utilizado.

Se você chamasse Classe.metodoEstatico() e se dentro desse método fosse possível acessar um método "não estático", o Java não saberia de qual dos objetos existentes você está querendo chamar esse método "não estático".

A solução de contorno sua não é uma chamada de método "não estático" a partir de um método estático. Na verdade, quando você instancia um objeto, você pode usar normalmente os membros "não estáticos" daquele objeto, independente dele ser instanciado dentro de um bloco estático (no caso, o main) ou não.

Um adendo: nesse objeto instanciado, você também consegue acessar membros estáticos da classe. Ou seja, a partir de membros não estáticos é possível acessar membros estáticos. Mas o contrário não é possível.