Я изучаю экзамен по Java. Пока я учился, я встречал синтаксисы в java, которые мне незнакомы. Такие, как фигурные скобки ({}) без тела класса без имени, у некоторых есть статическое ключевое слово. Я узнал, что они называются "Инициализаторы". Может ли кто-нибудь помочь мне указать на основные различия между ними и то, как они отличаются от конструктора. Благодаря
Статические инициализаторы против инициаторов инициализаторов и конструкторов
Ответ 1
Основное различие между ними - порядок, в котором они выполняются. Чтобы проиллюстрировать это, я объясню их на примере:
public class SomeTest {
static int staticVariable;
int instanceVariable;
// Static initialization block:
static {
System.out.println("Static initialization.");
staticVariable = 5;
}
// Instance initialization block:
{
System.out.println("Instance initialization.");
instanceVariable = 10;
}
// Constructor
public SomeTest() {
System.out.println("Constructor executed.");
}
public static void main(String[] args) {
new SomeTest();
new SomeTest();
}
}
Выход будет:
Static initalization.
Instance initialization.
Constructor executed.
Instance initialization.
Constructor executed.
Кратко говорим:
- Статические блоки инициализации запускаются после того, как класс загружается JVM.
- Блоки инициализации экземпляра запускаются перед конструктором каждый раз, когда вы создаете экземпляр объекта.
- Конструктор (очевидно) запускается каждый раз при создании объекта.
Ответ 2
Конструктор вызывается один раз, когда создается новый экземпляр класса. Значения, инициализированные в конструкторе, относятся к области экземпляра. Каждый экземпляр может иметь другое значение для того же поля, инициализированного в конструкторе.
Статические инициализаторы полезны для выполнения кода установки в статических классах и заполнения структур данных в Enums. Они вызываются один раз, по порядку сверху вниз, когда класс загружается в JVM, и данные существуют в пределах класса Class или Enum. Все ссылки на класс возвращают одинаковое значение для полей, инициализированных в статических инициализаторах
Безмерные фигурные скобки представляют собой анонимные кодовые блоки, в которых указаны имена ссылок. Если вы создаете ссылку внутри блоков, вы не можете получить значение этой ссылки вне блока. Если вы обнаружите, что они нуждаются в них, это знак, необходимый для реорганизации вашего кода в другие методы.
Ответ 3
Это то, что вам действительно нужно посмотреть в учебнике, чтобы получить ответ. Однако я могу дать вам несколько указателей. Прошло несколько лет с тех пор, как я запрограммировал Java, поэтому любая информация, которую я вам дал, является общей.
Как правило, безымянный блок с фигурными фигурными скобками является анонимной функцией. Статические инициализаторы инициализируют данные, которые являются глобальными для всех экземпляров этого класса, и запускаются после первого обращения к классу. Вы должны быть осторожны с тем, как вы используете статические свойства или методы. С помощью этой информации вы можете найти точные данные в своих учебниках.