G
Gast2
Gast
Keine Ahnung wie ich es nennen soll - aber mir ist heute doch tatsächlich mal was neues über den Weg gelaufen was ich so bisher noch nicht gesehn hab, und auch nicht wusste was das sein soll:
static Blöcke waren mir ja bekannt auch wenn ich sie recht wenig benutze, aber dieser Block nicht wirklich... der wird anscheinend aufgerufen bei der Instantierung vor dem Constructor Aufruf. Sehr strange.
Das beste daran - man kann sogar schon Membervariablen modifizieren:
Und sehr sehr abgefahren ist - ich kann soviele Blöcke definieren wie ich will und die werden der Reihenfolge nach abgearbeitet:
So - genug Beispiele. Wer kennt diese Konstruktion? Wozu soll die gut sein?
Ich fand sie nur verwirrend und ist mir in ca 5 Jahren Java bisher noch nicht untergekommen. Wuuste nicht mal das es sie gibt - und erst recht nicht sowas wie in meinem letzten Beispiel. Weiß auch nicht genau wonach ich da bei der allwissenden Müllhalde suchen soll?
Java:
public class Test{
public Test(){
System.out.println("Called constructor");
}
{ // WTF? Was ist das hier?
System.out.println("Called init block");
}
static {
System.out.println("Called static block");
}
public static void main(String[] args) {
Test t = new Test();
t= new Test();
}
}
static Blöcke waren mir ja bekannt auch wenn ich sie recht wenig benutze, aber dieser Block nicht wirklich... der wird anscheinend aufgerufen bei der Instantierung vor dem Constructor Aufruf. Sehr strange.
Das beste daran - man kann sogar schon Membervariablen modifizieren:
Java:
public class Test{
int a;
static int b;
public Test(){
System.out.println("Called constructor");
System.out.println(a);
System.out.println(b);
}
{
a = 1;
b = 2;
System.out.println("Called init block");
}
static {
System.out.println("Called static block");
b = 1;
}
public static void main(String[] args) {
Test t = new Test();
t= new Test();
}
}
Und sehr sehr abgefahren ist - ich kann soviele Blöcke definieren wie ich will und die werden der Reihenfolge nach abgearbeitet:
Java:
public class Test{
{
System.out.println("Called init block4");
}
public Test(){
System.out.println("Called constructor");
}
{
System.out.println("Called init block");
}
{
System.out.println("Called init block1");
}
{
System.out.println("Called init block2");
}
static {
System.out.println("Called static block");
}
{
System.out.println("Called init block3");
}
public static void main(String[] args) {
Test t = new Test();
t= new Test();
}
}
So - genug Beispiele. Wer kennt diese Konstruktion? Wozu soll die gut sein?
Ich fand sie nur verwirrend und ist mir in ca 5 Jahren Java bisher noch nicht untergekommen. Wuuste nicht mal das es sie gibt - und erst recht nicht sowas wie in meinem letzten Beispiel. Weiß auch nicht genau wonach ich da bei der allwissenden Müllhalde suchen soll?