Я знаю, что статические блоки запускаются раньше всего. Но здесь, что происходит при вызове B.test()? Порядок выполнения и установки значений? Позже, когда b1 имеет значение null, все еще, как b1.i оценивает значение 20?Порядок исключения, статические блоки, поля
class B
{
static int i;
static {
i = 20;
System.out.println("SIB");
}
static int test() {
int i = 24;
System.out.println(i);
return i;
}
}
public class Manager {
public static void main(String[] arg) {
B.test();
B b1 = null;
System.out.println(b1.i);
}
}
Выход:
SIB
24
20
B.test не установлены какие-либо статические или переменные экземпляра, поэтому вызов не будет иметь долгосрочный эффект. (Прочтите его ОЧЕНЬ внимательно.) –
Кстати, это неправильная практика доступа к статическому члену из нестатической ссылки (например, экземпляр b1). – garbagecollector