Blocos estáticos são executados uma única vez quando vc roda a sua classe, independente de qualquer coisa, qualquer outro código que venha a estar no corpo da mesma.
public class Ola{
public static String val;
static{
this.val = "Oba";
}
public Ola(String o){
this.val = o;
}
public Ola(){
}
}
public class UsaOla(){
void eita(){
System.out.println(Ola.val);
System.out.println((new Ola("Aqui")).val);
}
}
Pelo o que entendi , logo, no primeiro System.out.println(), ele vai imprimir “Oba”, no segundo ele imprimi “Aqui”?
pois é. você pode usar o static pra gerar uma msgzinha boba no incio do programa do tipo:
static {
System.out.println("******************************");
System.out.println("Esse é um bom programa!");
System.out.println("******************************");
}
Outra coisa:
Construtor tem que ter o nome da classe.
Ao inves dos seus public Ola, vc tem que colocar public UsaOla.
Outra coisa também é que vai dar erro quando vc tentar fazer a linha