De que se trata o artigo: O artigo trata das diferenças entre membros estáticos e membros de instância. Descreve suas regras de utilização e resultados em suas execuções. Também faz uma breve referência ao uso de polimorfismo, sobrecarga e sobrescrita de métodos.


Para que serve:
Todo método, variável ou bloco de inicialização na linguagem Java são, ou estáticos ou de instância. Saber como cada um funciona é importante para o desenvolvimento de aplicações.


Em que situação o tema é útil:
Esse tema é útil para todos os desenvolvedores Java, principalmente para os que estão iniciando na linguagem. Também pode se tornar um bom material de estudo para certificações Java, como a OCJP

Resumo: O artigo relata as principais diferenças entre os membros estáticos e membros de instância na linguagem Java. Demonstra como eles devem ser criados, acessados e também suas regras de execução. Apresenta ainda conceitos ligados à herança como o uso de polimorfismo, métodos sobrecarregados e métodos sobrescritos. Exemplos práticos foram criados e suas execuções são explicadas para melhor aprendizado

Na linguagem Java há dois tipos de membros que podem ser utilizados em uma classe, os membros estáticos e os membros de instância. Estes tipos de membros apresentam diferenças na forma como devem ser declarados e também na maneira como se comportam em uma classe.

Os membros de uma classe podem ser considerados como métodos, variáveis e blocos estáticos ou de instância. Os membros estáticos sempre devem ser marcados com a palavra chave static, xenquanto os membros de instância não devem possuir esta marcação.

Neste artigo analisaremos as principais diferenças existentes entres métodos, variáveis e blocos de instância e estáticos. Analisaremos também como usar cada um deles, e qual o comportamento que eles terão na execução de uma classe e também quando trabalhamos com herança. Exemplos práticos serão demonstrados e seus resultados serão descritos passo a passo para melhor compreensão do assunto. Além disso, faremos uma pequena abordagem sobre os conceitos e regras de polimorfismo e de como sobrescrever e sobrecarregar métodos.

Membros Estáticos

A linguagem Java nos permite ter variáveis, blocos e métodos do tipo static. A palavra static está entre algumas das palavras chaves do Java, ou seja, faz parte das palavras reservadas que não podem ser usadas como nome de variáveis, métodos ou classes. Uma variável, um bloco ou mesmo um método do tipo static, não faz parte da instância de uma classe e sim da classe. Quando criamos uma classe com membros estáticos, esses membros serão os primeiros códigos a serem carregados, mesmo que não haja nenhuma instância desta classe.

O método estático mais conhecido é sem dúvida nenhuma o main(), utilizado para inicializar uma aplicação desenvolvida em Java. Dentro de um método ou de um bloco de inicialização estático, só podemos acessar variáveis ou outros métodos estáticos, e para acessarmos membros não estáticos precisamos então criar uma instância da classe.

Quando criamos variáveis e blocos estáticos em uma classe, devemos saber que eles serão executados de cima para baixo, ou melhor, do primeiro para o último criado. Podemos também ter uma classe apenas com membros estáticos.

Uma observação importante é que um método estático nunca será sobrescrito na subclasse. O conceito de sobrescrever não existe para métodos estáticos, ele serão redefinidos.

Devemos saber o que se pode e o que não se pode marcar como um membro estático. A linguagem Java oferece as seguintes possibilidades para esta marcação:

  • Blocos de inicialização;
  • Variáveis;
  • Métodos;
  • Uma classe aninhada dentro de outra classe.

Porém a marcação não poderá ser utilizada nos seguintes casos:

  • Classes;
  • Interfaces;
  • Classes internas locais de métodos;
  • Métodos de classes internas;
  • Variáveis de instância;
  • Variáveis locais.

Variáveis e Métodos Estáticos: O modificador static é usado para criar variáveis e métodos que irão existir independentemente de quaisquer instâncias criadas para a classe. Em outras palavras, os membros static existem antes mesmo de você criar uma nova instância de uma classe, e haverá apenas uma cópia do membro static, independentemente do número de instâncias dessa classe.

Membro estático: bloco de inicialização e método main()

Um bloco de inicialização estático é executado quando a classe é carregada pela JVM (Java Virtual Machine) e serve para inicializar alguma informação necessária antes mesmo de se ter acesso a uma instância da classe.

O método main() tem uma diferença para outros métodos estáticos, ele é por padrão o método que diz ao Java que essa é a classe principal do projeto. Assim, o JRE saberá qual método será responsável pela inicialização da aplicação. Em uma aplicação Java SE, precisamos de pelo menos um método main() para executá-la, já em uma aplicação Java EE isto não é necessário.

A diferença entre um método estático e um bloco estático é bem visível. O método estático possui nome e um tipo de retorno e pode ainda possuir uma lista de argumentos, enquanto o bloco estático não possui nada disto. Além disso, um método ou variável do tipo estático pode possuir os modificadores de acesso do tipo private, protected, public ou default.

Na execução do código da Listagem 1, será impressa na tela a frase que está dentro do bloco estático. Veja que em nenhum momento esse bloco foi chamado dentro do método main(). Ele simplesmente é executado na criação da classe e como possui uma linha de saída em tela, ela é exibida no console. O método main() neste caso serve apenas para executar a classe.

Listagem 1. Bloco de inicialização estático e método main().


package javamagazine.listagem01;
   
public class MyFirstClass {
    static {
      System.out.println("MyFirstClass.static");
    }
 
    public static void main(String[] args) {
      //sem nenhuma instância
    }
} ... 

Quer ler esse conteúdo completo? Tenha acesso completo