Я изучаю экзамен по Java. Пока я учился, я встречал синтаксисы в java, которые мне незнакомы. Такие, как фигурные скобки ({}) без тела класса без имени, у некоторых есть статическое ключевое слово. Я узнал, что они называются «Инициализаторы». Может ли кто-нибудь помочь мне указать на основные различия между ними и то, как они отличаются от конструктора. СпасибоСтатические инициализаторы против Instance Инициализаторы против конструкторов
ответ
Главное отличие между ними - порядок, в котором они выполняются. Чтобы проиллюстрировать это, я объясню им пример:
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.
- Блоки инициализации экземпляра запускаются перед конструктором при каждом экземпляре объекта.
- Конструктор (очевидно) запускается каждый раз при создании объекта.
Это хороший ответ. Но я хотел бы добавить, что конструкторы гораздо более распространены, чем инициализаторы экземпляров. Я думаю, что основной пример использования, например, инициализаторы, предназначен для инициализации в анонимных внутренних классах, которые не могут иметь конструкторов, потому что им не хватает имен. –
очень простой и приятный пример +1 –
Конструктор вызывается один раз, когда создается новый экземпляр класса. Значения, инициализированные в конструкторе, относятся к области экземпляра. Каждый экземпляр может иметь другое значение для того же поля, инициализированного в конструкторе.
Статические инициализаторы полезны для выполнения кода установки в статических классах и заполнения структур данных в Enums. Они вызываются один раз, по порядку сверху вниз, когда класс загружается в JVM, и данные существуют в пределах класса Class или Enum. Все ссылки на класс возвращают одно и то же значение для полей, инициализированных в статических инициализаторах
Безмерные фигурные скобки представляют собой анонимные кодовые блоки, в которых указаны имена ссылок. Если вы создаете ссылку внутри блоков, вы не можете получить значение этой ссылки вне блока. Если вы обнаружите, что они нуждаются в них, это знак, который вам нужно реорганизовать ваш код на большее количество методов.
«Безмерные фигурные скобки» называются [инициализаторами экземпляра] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.6) –
Это то, что вам действительно нужно посмотреть в учебнике, чтобы получить ответ. Однако я могу дать вам несколько указателей. Прошло несколько лет с тех пор, как я запрограммировал Java, поэтому любая информация, которую я вам дал, является общей.
Как правило, безымянный блок с фигурными фигурными скобками является анонимной функцией. Статические инициализаторы инициализируют данные, которые являются глобальными для всех экземпляров этого класса, и запускаются после первого обращения к классу. Вы должны быть осторожны с тем, как вы используете статические свойства или методы. С помощью этой информации вы можете найти точные данные в своих учебниках.
- 1. Статические инициализаторы
- 2. Статические инициализаторы в bcel
- 3. Java статические инициализаторы и отражение
- 4. Статические инициализаторы и безопасная публикация
- 5. Статические инициализаторы и статические методы в Java
- 6. Статические методы фабрики против экземпляров (обычных) конструкторов?
- 7. Инициализаторы собственности против старого способа инициализации собственности .Can вы прояснить
- 8. Статические инициализаторы и синхронизация потоков (.NET)
- 9. Java - статические инициализаторы в импортированных проектах
- 10. Вызывать статические инициализаторы типа посредством отражения возможно
- 11. Статические инициализаторы и константные переменные Wrapper
- 12. Являются ли статические инициализаторы Java безопасными?
- 13. Инициализаторы модулей в C#
- 14. Instance против Reference против объекта в Javascript
- 15. @synchronized против NSLock Instance против pthread_mutex_t
- 16. Instance переменная: само против @
- 17. Являются ли инициализаторы экземпляров плохими?
- 18. В C#, как взаимодействуют инициализаторы полей и инициализаторы объектов?
- 19. Почему мы должны идти для удобства Инициализаторы, чем ручные инициализаторы
- 20. Когда использовать инициализаторы?
- 21. Swift: пользовательские инициализаторы ViewController
- 22. Инициализаторы в React.js?
- 23. Инициализаторы экземпляров в Emberjs
- 24. Rails: инициализаторы для среды?
- 25. Руби Hash Инициализаторы
- 26. Инициализаторы строительство в Swift
- 27. Reload рельсам Инициализаторы
- 28. Инициализаторы пользовательских объектов
- 29. Инициализаторы кластера с ARC
- 30. C++ 0x назначенные инициализаторы
Я рекомендую вам эту книгу http://www.apress.com/9781430247647 главы 3 и 4 – Leo
@Reieus он также спросил об анонимных блоках кода – jeremyjjbrown