Статический блок инициализации в непубличном классе Out
не запускается, но выполняется статический блок инициализации в статическом вложенном классе snOut
. Как и почему это возможно?Статический блок инициализации пропускает
public class staticNested {
static{
System.out.println("In staticNested");
}
static class sn{
static{
System.out.println("sn in staticNested");
}
void p(){
System.out.println("In static nested class method p");
}
}
public static void main(String [] args){
sn n = new sn();
n.p();
Out.snOut no = new Out.snOut();
no.p();
}
}
class Out{
static{
System.out.println("In Out"); //Skips this
System.out.println("Here"); //Skips this
}
static class snOut{
static {
System.out.println("In snOut in Out");
}
private int x;
void p(){
System.out.println("In snOut in outside Class out: " + x);
}
}
}
Это выход:
In staticNested
sn in staticNested
In static nested class method p
In snOut in Out
In snOut in outside Class out: 0
Я не думаю, что класс 'Out' всегда загружен. Он загружается, когда вы обращаетесь к его статическому полю или статическому методу или создаете экземпляр. my beginner knowledge> – jn1kk
Ah. Понимаю. Создание нового экземпляра в основном методе делает выполнение блока. Спасибо – Mob
Разница, почему 'Out' не загружается, а' staticNested' - потому, что main находится в 'staticNested', это как бы автонагрузки, как вы ожидали. – jn1kk