В соответствии с SCJP6 (Страница 507) я обнаружил, что переменные экземпляра присваиваются значениям по умолчанию до завершения конструкторов суперкласса, я попробовал пример в режиме отладки, но я увидел, что суперподрядчик работает до того, как переменные экземпляра получат свои значения по умолчанию, объясните это мне?Какой из них запускается первым? значения по умолчанию для переменных экземпляра или суперконструкторы?
Пример я использовал в случае, если кто-то хочет попробовать:
package courseExercise;
class test {
test() {
System.out.println("Super Constructor run");
}
}
public class Init extends test {
private Integer i = 6;
private int j = 8;
Init(int x) {
super();
System.out.println("1-arg const");
}
Init() {
System.out.println("no-arg const");
}
static {
System.out.println("1st static init");
}
public static int d = 10;
{
System.out.println("1st instance init");
}
{
System.out.println("2nd instance init");
}
static {
System.out.println("2nd static init");
}
public static void main(String[] args) {
new Init();
new Init(7);
}
}
Я думаю, потому что вы инициализируете переменные при объявлении. –
, но, как указывает SCJP6, они сказали, что значения по умолчанию назначаются до того, как суперконтрактор будет завершен, даже если инициализация является частью их объявления. – Tarik
«Я видел, что суперподрядчик работает до того, как переменные экземпляра получают значения по умолчанию», как вы это утверждали? (опубликуйте свой журнал) – njzk2