Celowo popełniłem błąd, wiem że należy zaminić linie 39 i 40.
Rozumiem, że 1) bloki statyczne są wykonywane przed metodą main().
Rozumiem:
2) w main(): drukuje "public static void main" - ok
3) w main(): tworzymy obiekt - ok
Nie rozumiem co dalej:
Tworzymy obiekt, więc wywołany zostaje konstruktor. Czemu 4) po wywołaniu konstruktora i przed wykonaniem pierwszej linii jego kodu, zostaje wywołany blok niestatyczny? I dopiero po wykonaniu bloku niestatycznego wracamy do wnętrza konstruktora, do poleceń w nim zapisanych...
package pl.codegym.task.task15.task1524;
/*
Kolejność ładowania zmiennych
*/
public class Solution {
static {
init();
}
static {
System.out.println("Blok statyczny");
}
{
System.out.println("Blok niestatyczny");
printAllFields(this);
}
public int i = 6;
public String name = "Imię";
public Solution() {
System.out.println("Konstruktor Solution");
printAllFields(this);
}
public static void init() {
System.out.println("static void init()");
}
public static void main(String[] args) {
System.out.println("public static void main");
Solution s = new Solution();
}
public static void printAllFields(Solution obj) {
System.out.println("static void printAllFields");
System.out.println(obj.name);
System.out.println(obj.i);
}
}