Membros não-estáticos em Java
Por: Marco R.
04 de Setembro de 2020

Membros não-estáticos em Java

Acessando membros não-estáticos a partir de métodos estáticos em Java

Informática Geral Java JAVA SE Java Enterprise Edition JAVA EE Programação em Java Linguagem de programação iniciante

O título deste artigo se refere a um erro muito comum cometido pelos iniciantes em Java, que advém do fato de não saberem trabalhar com membros estáticos (variáveis e métodos estáticos). Um atributo marcado com o modificador static tem o seu valor compartilhado por todos os objetos da classe, ou seja, só haverá uma cópia dele para todos os objetos da mesma classe. Por isso, não podemos trabalhar com membros não-estáticos de maneira "estática". A figura abaixo ilustra a diferença entre variável não-estática (também conhecida como variável de instância) e variável estática (também conhecida como variável de classe).

Repare que a classe B possui uma variável estática field2, e todos os objetos (T1T2 e T3) criados a partir desta classe possuem o mesmo valor para field2, devido isto estar compartilhado entre todas as instâncias. Em contraste, a classe A possui uma variável não-estática field1 exclusiva para cada objeto criado (P1P2 e P3), isto significa que o valor de uma variável não-estática não é compartilhado entre as instâncias da classe.

Métodos também podem ser definidos como estáticos. Um método estático pode ser invocado diretamente pela própria classe, sem a necessidade de criar uma instância da classe, ou seja, sem precisar criar um objeto. Seguindo o mesmo conceito de variáveis estáticas, métodos estáticos pertencem a classe, e não a instância da classe, e por isso são conhecidos como métodos de classe. Os métodos estáticos são comumente utilizados para acessar variáveis estáticas, e métodos estáticos não podem acessar membros não-estáticos da classe. Aí que está o erro que comumente iniciantes em Java cometem, conforme ilustra o código a seguir.

public class HelloWorld {

    private String saudacao = "Olá Mundo!";

    public static void main(String[] args) {   

        System.out.println(saudacao);

    }
}

Temos a famosa função estática main, que é um membro da classe HelloWorld, tentando acessar a variável não-estática "saudacao". Este código nem compila! O erro de compilação “Cannot make a static reference to the non-static field saudacao” indica que não podemos fazer uma referência estática para a variável não-estática. Portanto, nem todas as combinações entre membros de classe e de instância são permitidas.

  • Métodos de instância podem acessar variáveis de instância e métodos de instância diretamente;
  • Métodos de instância podem acessar variáveis de classe e métodos de classe diretamente;
  • Métodos estáticos podem acessar variáveis de classe e métodos de classe diretamente;
  • Métodos estáticos não podem acessar variáveis de instância ou métodos de instância diretamente; deve haver uma referência de objeto. Além disso, métodos estáticos não podem utilizar o operador de referência "this", pois não há nenhuma instância que o operador "this" possa se referir.
Cadastre-se ou faça o login para comentar nessa publicação.

Confira artigos similares

Confira mais artigos sobre educação

+ ver todos os artigos

Encontre um professor particular

Busque, encontre e converse gratuitamente com professores particulares de todo o Brasil