У меня есть класс Car, и я хочу создать его экземпляр. Можно написать:
Car car;
Car car = new Car();
В чем заключается разница между этми двумя записями?
В первом случаи вы просто объявляете ссылку на объект и не больше. У вашего Car, скорее всего есть поля, например, width, speed, и так далее. Данная запись их не затрагивает, их значение - не определено. С такой машинкой нельзя пока что ничего делать, кроме как инициализировать её.
Во втором случаи вы вызываете метод, в данном случае - это конструктор. Теперь с этой машиной можно полноправно работать. Конструктор будет пустым, его поля = null.
Если вы хотите увидеть кардинальное отличие, давайте представим такую ситуацию - у вас есть приложение в котором очень сильно ограничена память. Когда вы написали первую строчку, а затем запустили программу, много место не ушло. Во втором случаи, к примеру, о нашей машинке в конструкторе дается очень много информации, запускаются другие файлы, подкачиваются библиотеки...
В таком случаи в воображаемом приложении не хватит памяти, и оно вылетит.
Первый случай Car car;
со вторым объединяет только то, что есть переменная типа Car
. Для локальной переменной вам придется присвоить ей значение, иначе код просто не скомпилируется. Для переменной экземпляра, у нее будет ссылка по умолчанию на объект null
Car car = null;
Во втором же случае
Car car = new Car();
командой new
мы создаем новый экземпляр (объект) класса Car
и присваиваем переменной ссылку на него. Т.о.
- у нас есть переменная
- есть новый объект (в куче выделена память и заполнена данными объекта)
- у переменной есть ссылка на объект, и можно не опасаться NullPointerException
- у объекта есть как минимум одна действующая ссылка на него, а значит он доступен для работы, и в обозримом будущем сборщик мусора ему не страшенПолучается, что в недрах JVM создана целая, хоть и небольшая, но функциональная и рабочая структура.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пытаюсь приспособить Room для работы с зависимостями "один-ко-многим"Про то, как использовать @Relation для чтения записей рассказывается в [1,2,3,4]
Пытаюсь освоить SpringДелаю все по видео Spring Потрошитель, но на экран ничего не выходит
как ??? В игре Добавить кнопку перезагрузки после проигрыша, чтобы кнопка появлялись в JPanel после проигрыша и при нажатии на неё приложение...