Spec-Zone .ru
спецификации, руководства, описания, API

Инициализация экземпляра

Порядок инициализации

Новый JavaFX экземпляр class инициализируется в этом порядке:

  • Объект создается.
  • Конструктор по умолчанию суперкласса Java, если таковые вообще имеются, выполняется.
  • Значения инициализаторов переменной экземпляра объектного литерала вычисляются (но не устанавливаются).
  • Переменные экземпляра суперклассов JavaFX устанавливаются.
  • Переменные экземпляра этого class устанавливаются в лексическом порядке.
  • Блок init, если таковые вообще имеются, оценивается. Экземпляр теперь инициализируется.
  • Блок postinit, если таковые вообще имеются, оценивается.

Следующий раздел покроет, как устанавливаются переменные экземпляра.

Авеню Инициализации Переменной экземпляра

Значение переменной экземпляра в конце инициализации может быть установлено любым из нескольких способов: значение, обеспеченное в объектном литерале, начальное значение, определенное в объявлении переменной, initializingExpression на переменном объявлении переопределения, или присвоении в initBlock. Эти авеню обсуждаются ниже.

Экземпляры класса создаются с объектным литералом (newExpression можно рассмотреть в этих целях как эквивалентный объектному литералу, который не устанавливает переменных экземпляра). Например:

var fu = Foo { x: 14 }

Здесь переменная экземпляра x в Foo устанавливается объектным литералом быть 14 (примечание: x, возможно, был объявлен в суперклассе Foo).

Объявление переменной экземпляра явно или неявно устанавливает значение по умолчанию для переменной. Например это могло быть установлено явно:

class Foo {
   var x = 99;
}

Здесь у x есть initializingExpression.

Если никакой initializingExpression не обеспечивается, значение по умолчанию для типа является значением по умолчанию типа переменной экземпляра - см. главу Типов и Значений. Например:

class Answers {
   var ungulate : Boolean;
}

Так как ложь является значением по умолчанию для Булева типа, значение по умолчанию копытного животного является ложью.

variableOverrideDeclaration может переопределить значение по умолчанию. Например:

class Shed {
   var siding = "aluminum";
}

class FancyShed extends Shed {
   override var siding = "copper";
}

Здесь FancyShed переопределяет значение по умолчанию запасного пути. Отметьте, что variableOverrideDeclaration, у которого нет initializingExpression, не будет переопределять значение по умолчанию.

Точно одно из вышеупомянутого установит начальное значение. Если значение обеспечивается в объектном литерале, который будет использоваться. Иначе, если переопределение для переменной обеспечит initializingExpression, то это будет использоваться. Если это не будет переопределено, то явный initializingExpression предоставит начальное значение. Приводя все к сбою, что, значение по умолчанию для типа будет использоваться.

После того, как одно из вышеупомянутого установило переменную экземпляра, initBlock, если есть выполняется. Этот блок может сбросить переменную экземпляра.