public class Sequence {
Sequence() {
System.out.print("c ");
}
{
System.out.print("y ");
}
public static void main(String[] args) {
new Sequence().go();
}
void go() {
System.out.print("g ");
}
static {
System.out.print("x ");
}
}
kkkk, isso é java mas precisamente uma classe java onde temos um metodo main que transforma a classe em um programa executável.
será impresso nesta ordem:
xycg
A razão é que os blocos estáticos são executados primeiro, depois os blocos não estáticos e depois os construtores, estes dois últimos o são sempre que um objeto é criado. Depois Temos a chamada do método go() que imprime a última print na tela.
É que eu não nunca tinha visto uma declaração assim:
public class Sequence {
{
System.out.print("y ");
}
static {
System.out.print("x ");
}
}
Eu sei que tudo que for declarado no escopo da classe será executado primeiro, até o void go(){}?
E qual o nome real para esses blocos, são blocos mesmo ou tem uma palavra chave?
Qual a diferença dos dois blocos acima, só a palavra static?
são chamados de Blocos de inicialização , temos o statico e os de classe , q tem somente as chaves . Os blocos de inic. static sao chamados apenas uma vez , na hora do carregamento de uma classe, e os de classe ou objetos são chamados a cada objeto criado (new ) .
Isso são blocos de inicialização.
Abaixo, um exemplo de todos os possíveis inicializadores/construtores, na ordem que são executados:
[code]public class Exemplo {
//Inicialização estática direta
private static var = 10;
//Bloco de inicialização estático
static {
}
//Inicialização direta
private var = 10;
//Bloco de inicialização
{
}
//Construtor
Exemplo() {
}
}[/code]
É importante lembrar que o que é estático inicializa antes do que não é estático, independente da ordem que apareçam. Dentre variáveis e blocos de mesmo tipo, são inicializados na ordem que aparecem.
Os estáticos são executados só uma vez, quando a classe é carregada.
Tudo que não for estático será executado a cada instância.
Esses blocos foram criados para se ter uma forma de inicializar inner classes anônimas (que nem poderiam ter construtor) ou para fazer inicializações complexas de variáveis estáticas (como carregar os valores de um Map de um arquivo).
De blocos de inicialização eu só não conhecia os anônimos e também a ordem em que são executados.
Os demais eu conhecia.
Obrigado. Estou estudando OCJP 1Z0-803 I e as explicações do fórum estão me ajudando muito, porque eu decidi estudar por conta sem a ajuda de testking ou simulado. Quero fazer a prova com o conhecimento adquirido naturalmente.
Obrigado mais uma vez.
Fazer os simulados (que não seja o TestKiller) é recomendado. Você não estará trapaceando, nem nada, apenas testando seu conhecimento e aprendendo com os exercícios. É de grande valor aprender com os simulados
Eu comprei alguns livros e neles tem muitas questões de simulado e da prova.
Realmente ajuda bastante.