static
Dando continuidade ao post [011], métodos e variáveis static podem ser acessados a partir de uma classes não instanciada (new). Mas isso não impede que métodos ou variáveis static seja acessado por uma instância. Resumindo, métodos e variáveis static são compartilhados sem a necessidade de instância da sua classe de declaração.
Pontos importantes
- Não existe sobrescrita de método static.
- Dentro de um método static não é possível acessar métodos e variáveis não static.
- Tanto métodos como variáveis static não podem ser acessados pela internamente como “this.”, se uma classe Automovel tiver uma variável tipo static, internamente ela poderia ser acessada Automovel.tipo e não this.tipo. Não compilaria porque this represeta a instância da classe.
- Variáveis não static não podem receber (=) variáveis static.
Exemplos
package certificacao; public class Automovel { public static void ligar() { System.out.println("Automovel..."); } } public class Carro extends Automovel { public static void ligar() { System.out.println("Carro..."); } } public class Main { public static void main(String[] args) { Automovel a = new Carro(); a.ligar(); } }
Analisando o código acima, qual seria o resultado esperado?
- Automovel…
- Carro…
A resposta correta é “Automovel…” porque o método ligar() não referência uma instância. Se o método não fosse static, teriamos um exemplo de polimorfismo e obteríamos o resultado “Carro…”. A melhor forma de acessar o método ligar() sem ter dúvidas é: Automovel.ligar() ou Carro.ligar().
package certificacao; public class Main { public static int count = 0; public Main() { count += 1; } public static void main(String[] args) { Main m = new Main(); // 1a instancia m = new Main(); // 2a instancia m = new Main(); // 3a instancia System.out.println(Main.count); } }
Analisando o código acima, qual seria o resultado esperado?
O resultado será 3, porque a variável static count está compartilhada para qualquer instância.
Comentem, estendam o assunto… Compartilhem =)