O que significa as chaves "{ }" com o System.out.print dentro?

Nunca havia vista esse código;

String name = "Hispo";
     {System.out.println(name);}

O nome Hispo será impresso na tela mesmo que não use as chaves, mas porque usa-las?

As chaves só servem pra delimitar um bloco de instruções com um escopo. Nesse caso não faz a menor diferença. Tente fazer isso aqui que talvez faça mais sentido:

{
    String name = "Hispo";
}
System.out.println(name);

A gente usa isso direto nos operadores if, else, for, etc. O formato desses operadores é:

if (condicao) [instrucao];

No lugar da [instrucao], você coloca uma única instrução (tipo System.out.println(...) ou um bloco, tipo {...}.

3 curtidas

Achei estranho porque nunca havia visto, obrigado.

Os parenteses soltos na classe representam blocos de inicialização. Este é o conceito correto. Eles podem ser estáticos ou não e são executados antes dos construtores. No ciclo de inicialização de uma classe, primeiro são executados os blocos de inicialização estáticos, depois os blocos normais, depois os construtores. Exemplo:

public class Teste{

	{System.out.println("A");}

	static {System.out.println("B");}

	public Teste(){
		{System.out.println("C");}
	}

}

Quando instanciar a classe (new Teste()), será impresso:
B
A
C

3 curtidas