Oi, como vão se foderem?

Após um longo período de “hiatus” aqui no geekvigarista, estamos tentando salvá-lo do mundo inferior dos blogs abandonados da terra média.

Claro, temos todos uma desculpinha um motivo para não ter postado ultimamente, mas, não vou encher sua cabeça com coisas que você não precisa/quer saber :)

Para voltar a ativa com chave de ouro (frase manjada, né?), resolvi começar uma série de artigos sobre funcionalidades não muito divulgadas e/ou desconhecidas pela maioria dos desenvolvedores Java.

Vou ir postando os artigos, com exemplos de código e uma breve explanada sobre. Se eu falar alguma merda coisa errada, por favor, não hesitem em me corrigir :) (“Stay hungry, stay foolish”).

É isso, nosso primeiro assunto vai ser bem básico!

Construtores

Você é capaz de dizer o que o código a seguir irá imprimir?

public class Construtor
{
	static
	{
		System.out.println(1);
	}

	{
		System.out.println(2);
	}

	public Construtor()
	{
		System.out.println(3);
	}

	public static void main(String[] args)
	{
		new Construtor();
		new Construtor();
	}
}

YEAH, você acertou se respondeu “1 2 3 2 3″.

A explicação é simples. As chaves que tem o static, é um static instance initializer. Isso significa que quando a classe for carregada, ele será executado. Por isso que o “1″ só foi impresso uma vez.

Já o outro par de chaves, sem o static, também é instance initializer (não preciso falar que esse não é estático, né?). Ele será chamado antes do “construtor real” da classe, sempre. Por isso, vemos que o “2″ foi impresso nas duas vezes que a classe foi instanciada.

Instance Initializers podem ser úteis para fazer coisas que serão comuns entre todos os construtores, por exemplo, evitando assim um construtor chamar outro utilizando o this, ou os típicos métodos init.

Os instance initializers também fornecem um pouco de syntax sugar ao instanciar novos objetos, usando double braces, por exemplo, instanciando um HashMap:

Map map = new HashMap() {{
	put(1, "oi");
	put(2, "tchau");
	put(3, "flw lesk td d bom");
}};

Esse tipo de coisa, se utilizada juntamente com outra coisa chamada bom-senso, pode tornar o código mais legível e simples, diminuindo inclusive a quantidade de código escrita para fazer algo. Fica aí a dica :)

E assim termina nosso primeiro Java “Hidden” Features. Devem vir mais deles por aí, fiquem atentos!

Abraço

 

Só para constar: para quem já estudou pra tirar certificação Java e/ou toda a documentação Java, provavelmente o que mostrei aqui não é novidade e muito menos “hidden”. Não me crucifiquem, Javafags!

Posts similares:

    None Found