O erro variável não estática não pode ser referenciada a partir de um contexto estático em Java é enfrentado principalmente pelos iniciantes no momento da compilação do programa Java. A razão para ocorrer este erro é que eles usam uma variável de membro não estática no método main(). Como o método main() em Java é um método estático e é invocado automaticamente, não precisamos criar um objeto para invocá-lo. Para entender o erro, primeiro devemos entender o estático e não estático método em Java .
Método Estático
Em Java , os métodos públicos pertencem a uma instância da classe, mas se falarmos sobre método estático , eles pertencem a uma classe e não a uma instância de uma classe. Não há necessidade de criar uma instância da classe para invocar um método estático. O membro estático pode acessar apenas o membro de dados estáticos e pode alterar seu valor.
Método não estático
Todos os métodos sem ter estático palavra-chave antes do nome do método são referidas como Não estático métodos. Não há necessidade de criar uma instância da classe para acessar o método estático e a variável estática. Os métodos não estáticos são usados para vinculação dinâmica ou de tempo de execução. Diferente estático método, podemos substituir o não estático método.
Vamos criar um programa Java e gerar o mesmo erro.
string.compare c#
No exemplo a seguir, declaramos uma variável privada número do tipo int antes do método main(). No método main(), estamos tentando incrementar o número em 1. Deve-se notar que o método main() é um método estático e a variável não é estática. Quando compilamos o programa acima, obtemos o mesmo erro, conforme mostrado abaixo.
Exemplo estático1.java
public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
Saída:
java convertendo inteiro em string
Agora vamos declarar a variável número como estático e compile o código. Observe que a variável e o método main() são estáticos.
StaticExample2.java
class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
Saída:
O programa compila e é executado com sucesso.
chave de inserção do laptop
Cada instância de uma variável não estática possui um valor diferente e é criada quando o operador new() inicializa uma instância de um objeto. As variáveis estáticas são criadas ou inicializadas quando a classe é carregada em JVM .
Precisamos de uma instância de um objeto para chamar a variável não estática. Podemos criar muitos objetos atribuindo valores diferentes a essa variável não estática ou de instância.
StaticExample3.java
class variable { int number; public static void increment() { number++; } } class StaticExample { public static void main(String args[]) { variable var1 = new variable(); variable var2 = new variable(); variable var3 = new variable(); var1.number = 12; var2.number = 13; var3.number = 14; variable.increment(); System.out.println(var1.number); System.out.println(var2.number); System.out.println(var3.number); } }
Saída:
No programa acima, três objetos, var1, var2, var3 , são criados para a classe variável e atribuiu os três valores diferentes 12, 13, 14 para os objetos var1, var2 , e var3 , respectivamente. Agora o número propriedade de cada objeto tem seu próprio valor inteiro. Quando tentamos incrementar o valor da propriedade number chamando o método increment(), o compilador não entende para qual valor de número o método deve incrementar o valor. O compilador enfrenta o erro de ambiguidade e lança o erro em tempo de compilação variável não estática não pode ser referenciada a partir de um contexto estático .
Solução para o erro
Existe uma maneira simples de resolver o problema variável não estática não pode ser referenciada a partir de um contexto estático erro. No código acima, temos que endereçar a variável não estática com o nome do objeto. De forma simples, temos que criar um objeto da classe para fazer referência a uma variável não estática de um contexto estático. Uma nova cópia de todas as variáveis não estáticas é criada quando uma nova instância da variável é criada. Assim, podemos acessar essas variáveis utilizando a referência da nova instância da classe. por exemplo, considere o seguinte programa Java.
falha de proteção geral
StaticExample4.java
class staticExample { int number = 0; public static void main(String args[]) { // using non-static variable by creating an object of the class staticExample test = new staticExample(); test.number++; System.out.println(test.number);a } }
Saída:
Descrição
No programa acima, acessamos a propriedade number usando o nome da classe exemplo estático. Criamos um objeto com o nome da classe StaticExample teste e incrementar o valor do número usando o objeto de teste.