Bloco de inicialização?

2 respostas
bruno_r_santana

Olá amigos,

Me deparei com um código curiosos em um livro para certificação.

Vejam:

public class ifTest {

    public static void main(String args[]) {
        if (true == false); //reparem no ponto e virgula
        { //aqui começa um bloco de inicialização? pode ter bloco de inicialização dentro de método?
            System.out.printf("%s", "TESTE");
        }
    }
}

Vejam que você é facilmente induzido a pensar que nada é impresso na tela já que true não é igual a false, porém após a instrução if tem um ponto e vírgula, ou seja, se a condição for verdadeira não fará nada e logo embaixo exibe TESTE.

Primeira dúvida: isso aqui
if (true == false);
é tipo isso
if (true == false)System.out.print();
? Não sabia que podia ter if sem nada após a condição e só um ponto e virgula.

Segunda dúvida. Aquele bloco dentro do método main iniciado por uma chave seguido de uma impressão na tela e fechado em seguida com outra chave é um bloco de inicialização? Mas se for ele só deveria ser executado ao criarmos uma instância da classe não é ?

Me ajudem a entender por favor que fiquei com um nó na cabeça.

Abraço

2 Respostas

luksrn

1- Sim, é possível ter coisas do tipo if ( teste ); E ele não quer dizer que tem um System.out.print implicito não, apenas não tem nada.

2 - E não, esse bloco de código não é considerado bloco de incialização. Blocos de inicialização só são situados na classe, seja ele bloco estático ou de instância. Procurando rapidamente aqui no google, achei um link bacana que explica isso de forma mais detalhada http://www.davidpaniz.com/2009/01/22/pre-construtores-e-blocos-estaticos/

bruno_r_santana

Bom dia,

luksrn, esse link ai é muito bom, explica certinho. Muito obrigado. Separei uns trechos dele para colar aqui embaixo, segue:

Outro ponto importante, é lembrar que SÓ é um pré construtor se estiver fora de qualquer método, não confundir com blocos dentro de métodos.

private test() { { System.out.println("two"); } }
Isso é apenas um bloco dentro do código que compila normalmente e não serve pra nada! É exatamente a mesma coisa que:

private test() { System.out.println("two"); }

Criado 23 de outubro de 2012
Ultima resposta 24 de out. de 2012
Respostas 2
Participantes 2