Неинициализированные переменные и члены в Java
Рассмотрим следующий фрагмент:
public class TestClass { private String a; private String b; public TestClass() { a = "initialized"; } public void doSomething() { String c; a.notify(); // This is fine b.notify(); // This is fine - but will end in an exception c.notify(); // "Local variable c may not have been initialized" } }
Хотя и "b", и "c" не инициализированы, компилятор выдает ошибку времени компиляции для "c", но не для "b". Это различие вытекает из правил языка для инициализации переменных экземпляра и локальных переменных.
Переменные экземпляра объектного типа (например, «a» и «b») по умолчанию инициализируются нулевым значением, если они не инициализированы явно. Вот почему доступ к «b.notify()» не приводит к немедленной ошибке, поскольку он фактически эквивалентен «null.notify()». Однако этот доступ в конечном итоге вызовет исключение NullPointerException при выполнении кода.
Напротив, локальные переменные типа объекта не инициализируются по умолчанию. Попытка доступа к неинициализированной локальной переменной, такой как «c», напрямую приводит к ошибке времени компиляции. Это строгое требование гарантирует, что локальные переменные всегда правильно инициализируются перед использованием.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3