Есть такой порядок инициализации:
1. static field parent
2. static { } parent
3. static field child
4.static { } сhild
5. non static field parent
6. non static { } parent
7. constructor parent
8. non static field child
9. non static { } child
10. constructor child
{ } - блок кода
Для меня сейчас важны два пункта:
1. static field - загрузка статик поля
2. static { } - загрузка статик блока
Пример:
public class Solution {
static int number = 25;
static {
method();
}
static void method(){
System.out.println(number);
}
Консоль: 25
Вроде всё верно, сначала поле после блок
Но!
public class Solution {
static {
method();
}
static int number = 25;
static void method(){
System.out.println(number);
}
Консоль: 0
т.е в этом случае сначала статик блок, а только после статик поле.
Как я понял, по правилам программирования, сначала указывают все данные класса, все его поля.И если нужно для подготовки к созданию объектов, инициализировать статик поля то придумали статические блоки. (Т.е сначала статик поля, после статик блоки.)
Но как я привел в примере, я изменил порядок полей и блоков.
Верно ли утверждение что - в начале инициализируются Статические элементы? т.е класс загружается сверху вниз, если первым статик поле - будет инициализация статик поля, если статик блок первый - значит он будет запущен первым, а после поля