logo

Por que a variável não estática não pode ser referenciada a partir de um contexto estático em Java

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
Por que a variável não estática não pode ser referenciada a partir de um contexto estático em Java

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:

Por que a variável não estática não pode ser referenciada a partir de um contexto estático em Java

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:

Por que a variável não estática não pode ser referenciada a partir de um contexto estático em Java

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:

Por que a variável não estática não pode ser referenciada a partir de um contexto estático em Java

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.