Что значит проинициализировать переменную java

Содержание
  1. 7. Java — Типы переменных, объявление и инициализация
  2. Содержание
  3. Локальные переменные в Java
  4. Пример
  5. Пример без инициализации
  6. Переменные экземпляра
  7. Пример
  8. Переменные класса или статические переменные в Java
  9. Пример
  10. Руководство по созданию объектов в Java
  11. 1. Обзор
  12. 2. Декларация против Инициализация
  13. 3. Объекты против примитивов
  14. 5. Создание объектов
  15. 6. Переменная Область действия
  16. 6.1. Переменные экземпляра и класса
  17. 6.2. Локальные переменные
  18. 7. Последнее Ключевое Слово
  19. 8. Инициализаторы в Java
  20. 8.1. Инициализаторы экземпляров
  21. 8.2. Блок Статической Инициализации
  22. 9. Порядок инициализации
  23. 10. Жизненный цикл объекта
  24. 11. Другие методы создания объектов
  25. 12. Заключение
  26. BestProg
  27. Инициализация переменных в методах класса. Инициализация полей (членов данных) класса. Способы инициализации членов данных класса
  28. Содержание
  29. Связанные темы
  30. Программирование: теория и практика
  31. Рубрики
  32. Свежие записи

7. Java — Типы переменных, объявление и инициализация

Переменная предоставляется нам именем хранения, чтобы нашей программой можно было манипулировать. Каждая переменная в Java имеет конкретный тип, который определяет размер и размещение её в памяти; диапазон значений, которые могут храниться в памяти; и набор операций, которые могут быть применены к переменной.

Необходимо объявить все переменные, прежде чем их использовать. Ниже показана основная форма объявления:

Чтобы объявить более чем одну переменную указанного типа, можно использовать список с запятыми в качестве разделителей.

Ниже приведены примеры объявления переменной и инициализации в Java:

В этом уроке рассмотрим различные типы переменных, доступных в языке Java. Существует три типа переменных:

  • локальные переменные;
  • переменные экземпляра;
  • статические переменные или переменные класса.

Содержание

Локальные переменные в Java

  • Локальные переменные объявляются в методах, конструкторах или блоках.
  • Локальные переменные создаются, когда метод, конструктор или блок запускается и уничтожаются после того, как завершиться метод, конструктор или блок.
  • Модификаторы доступа нельзя использовать для локальных переменных.
  • Они являются видимыми только в пределах объявленного метода, конструктора или блока.
  • Локальные переменные реализуются на уровне стека внутри.
  • В Java не существует для локальных переменных значения по умолчанию, так что они должны быть объявлены и начальное значение должны быть присвоено перед первым использованием.
Читайте также:  Что значит поперечное ускорение

Пример

«age» — локальная переменная, определяется внутри метода «pupAge()» и области её действия ограничивается только этим методом.

Будет получен следующий результат:

Пример без инициализации

Пример использования «age» без инициализации. Программа выдаст ошибку во время компиляции.

Это приведёт к следующему сообщению об ошибке во время компиляции:

Переменные экземпляра

  • Переменные экземпляра объявляются в классе, но за пределами метода, конструктора или какого-либо блока.
  • Когда для объекта в стеке выделяется пространство, создается слот для каждого значения переменной экземпляра.
  • В Java переменные экземпляра создаются тогда, когда объект создан с помощью ключевого слова «new» и разрушаются тогда, когда объект уничтожается.
  • Переменные содержат значения, которые должны ссылаться более чем на один метод, конструктор или блок, или на основные части состояния объекта, которые должны присутствовать на протяжении всего класса.
  • Переменные экземпляра могут быть объявлен на уровне класса, до или после использования.
  • Модификаторы доступа могут быть предоставлены для переменных экземпляра.
  • Переменные экземпляра в Java являются видимыми для всех методов, конструкторов и блоков в классе. Как правило рекомендуется сделать их private (уровень доступа). Однако можно сделать их видимыми для подклассов этих переменных с помощью модификаторов доступа.
  • Переменные экземпляра имеют значения по умолчанию. Для чисел по умолчанию равно 0, для логических — false, для ссылок на объект — null. Значения могут быть присвоены при объявлении или в конструкторе.
  • Переменные экземпляра в Java могут быть доступны непосредственно путем вызова имени переменной внутри класса. Однако в статических методах и различных класса (когда к переменным экземпляра дана доступность) должны быть вызваны используя полное имя — ObjectReference.VariableName.

Пример

Программа будет будет производить следующий результат:

Переменные класса или статические переменные в Java

  • Переменные класса, также известные в Java как статические переменные, которые объявляются со статическим ключевым слово в классе, но за пределами метода, конструктора или блока.
  • Там будет только одна копия каждой статической переменной в классе, независимо от того, сколько объектов создано из него.
  • Статические переменные или переменные класса в Java используются редко, кроме когда объявляются как константы. Константы — переменные, которые объявлены как public/private, final и static. Константы никогда не меняются от первоначального значения.
  • В Java статические переменные создаются при запуске программы и уничтожаются, когда выполнение программы остановится.
  • Видимость похожа на переменную экземпляра. Однако большинство статических переменных объявляются как public, поскольку они должны быть доступны для пользователей класса.
  • Значения по умолчанию такое же, как и у переменных экземпляра. Для чисел по умолчанию равно 0, для данных типа Boolean — false; и для ссылок на объект — null. Значения могут быть присвоены при объявлении или в конструкторе. Кроме того, они могут быть присвоены в специальных блоках статического инициализатора.
  • Статические переменные могут быть доступны посредством вызова с именем класса ClassName.VariableName.
  • При объявлении переменных класса как public, static, final, имена находятся в верхнем регистре. Если статические переменные такими не являются, синтаксис такой же, как у переменных экземпляра и локальных.

Пример

Это будет производить следующий результат:

Примечание: для получения доступа из внешнего класса, константы должны быть доступны как Employee.DEPARTMENT.

В предыдущих материалах не раз упоминались модификаторы доступа. В следующем уроке мы подробно их рассмотрим.

Источник

Руководство по созданию объектов в Java

Взгляните на различные способы инициализации примитивов и объектов в Java.

Автор: baeldung
Дата записи

1. Обзор

Проще говоря, прежде чем мы сможем работать с объектом в JVM, он должен быть инициализирован.

В следующих разделах мы рассмотрим различные способы инициализации примитивных типов и объектов.

2. Декларация против Инициализация

Давайте начнем с того, что убедимся, что мы на одной странице.

Объявление-это процесс определения переменной вместе с ее типом и именем.

Здесь мы объявляем переменную id :

Инициализация, с другой стороны, заключается в присвоении значения; например:

Чтобы продемонстрировать это, мы создадим класс User с именем и id свойствами:

Далее мы увидим, что инициализация работает по-разному в зависимости от типа поля, которое мы инициализируем.

3. Объекты против примитивов

Java предоставляет два типа представления данных: примитивные типы и ссылочные типы. В этом разделе мы обсудим различия между ними в отношении инициализации.

Java имеет восемь встроенных типов данных, называемых примитивными типами Java; переменные этого типа содержат свои значения напрямую.

Ссылочные типы содержат ссылки на объекты (экземпляры классов). В отличие от примитивных типов, которые хранят свои значения в памяти, где выделена переменная, ссылки не содержат значения объекта, на который они ссылаются.

Вместо этого ссылка указывает на объект, сохраняя адрес памяти, в котором находится объект.

Обратите внимание, что Java не позволяет нам узнать, что такое адрес физической памяти. Скорее, мы можем использовать ссылку только для ссылки на объект.

Давайте рассмотрим пример, который объявляет и инициализирует ссылочный тип из нашего класса User :

Как мы видим здесь, ссылка может быть назначена новому с помощью ключевого слова new, которое отвечает за создание нового объекта User .

Давайте продолжим изучать больше о создании объектов.

5. Создание объектов

В отличие от примитивов, создание объектов немного сложнее. Это происходит потому, что мы не просто добавляем значение в поле; вместо этого мы запускаем инициализацию с помощью ключевого слова new . Это, в свою очередь, вызывает конструктор и инициализирует объект в памяти.

Давайте обсудим конструкторы и ключевое слово new более подробно.

Ключевое слово new отвечает за выделение памяти для нового объекта с помощью конструктора.

Конструктор обычно используется для инициализации переменных экземпляра, представляющих основные свойства созданного объекта .

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

Класс может иметь много конструкторов, если их списки параметров различны ( перегрузка ) . Каждый конструктор, который не вызывает другой конструктор в том же классе, имеет вызов своего родительского конструктора, независимо от того, был ли он написан явно или вставлен компилятором через super() .

Давайте добавим конструктор в наш класс User :

Теперь мы можем использовать наш конструктор для создания объекта User с начальными значениями его свойств:

6. Переменная Область действия

В следующих разделах мы рассмотрим различные типы областей, в которых может существовать переменная в Java, и как это влияет на процесс инициализации.

6.1. Переменные экземпляра и класса

Переменные экземпляра и класса не требуют от нас их инициализации. Как только мы объявляем эти переменные, им присваивается значение по умолчанию следующим образом:

Теперь давайте попробуем определить некоторые переменные, связанные с экземплярами и классами, и проверить, имеют ли они значение по умолчанию или нет:

6.2. Локальные переменные

Локальные переменные должны быть инициализированы перед использованием , так как они не имеют значения по умолчанию, и компилятор не позволит нам использовать неинициализированное значение.

Например, следующий код генерирует ошибку компилятора:

7. Последнее Ключевое Слово

Ключевое слово final , примененное к полю, означает, что значение поля больше не может быть изменено после инициализации. Таким образом, мы можем определить константы в Java.

Давайте добавим константу в наш класс User :

Константы должны быть инициализированы либо при их объявлении, либо в конструкторе.

8. Инициализаторы в Java

В Java инициализатор – это блок кода, который не имеет связанного имени или типа данных и помещается вне любого метода, конструктора или другого блока кода.

Java предлагает два типа инициализаторов: статические и инициализаторы экземпляров. Давайте посмотрим, как мы можем использовать каждый из них.

8.1. Инициализаторы экземпляров

Мы можем использовать их для инициализации переменных экземпляра.

Чтобы продемонстрировать, давайте предоставим значение для пользователя id с помощью инициализатора экземпляра в нашем классе User :

8.2. Блок Статической Инициализации

Статический инициализатор или статический блок – это блок кода, который используется для инициализации статических полей. Другими словами, это простой инициализатор, отмеченный ключевым словом static:

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

При написании кода, который инициализирует различные типы полей, конечно, мы должны следить за порядком инициализации.

В Java порядок операторов инициализации выглядит следующим образом:

  • статические переменные и статические инициализаторы по порядку
  • переменные экземпляра и инициализаторы экземпляра по порядку
  • конструкторы

10. Жизненный цикл объекта

Теперь, когда мы научились объявлять и инициализировать объекты, давайте выясним, что происходит с объектами, когда они не используются.

В отличие от других языков, где нам приходится беспокоиться об уничтожении объектов, Java заботится об устаревших объектах через свой сборщик мусора.

Все объекты в Java хранятся в кучной памяти нашей программы . На самом деле куча представляет собой большой пул неиспользуемой памяти, выделенный для нашего Java-приложения.

С другой стороны, сборщик мусора – это программа Java, которая заботится об автоматическом управлении памятью путем удаления объектов, которые больше недоступны.

Чтобы объект Java стал недоступным, он должен столкнуться с одной из следующих ситуаций:

  • У объекта больше нет ссылок, указывающих на него
  • Все ссылки, указывающие на объект, находятся вне области видимости

В заключение, объект сначала создается из класса, обычно используя ключевое слово new. Тогда объект живет своей жизнью и предоставляет нам доступ к своим методам и полям.

Наконец, когда он больше не нужен, сборщик мусора уничтожает его.

11. Другие методы создания объектов

В этом разделе мы кратко рассмотрим методы , отличные от ключевого слова new , для создания объектов и их применения, в частности отражение, клонирование и сериализацию .

Отражение-это механизм, который мы можем использовать для проверки классов, полей и методов во время выполнения. Вот пример создания нашего Пользователя объекта с помощью отражения:

В этом случае мы используем отражение для поиска и вызова конструктора класса User .

Следующий метод, клонирование, – это способ создания точной копии объекта. Для этого наш класс User должен реализовать интерфейс Cloneable :

Теперь мы можем использовать метод clone() для создания нового клонированного пользователя объекта, который имеет те же значения свойств, что и объект user :

Мы также можем использовать Мы также можем использовать класс для выделения памяти для объекта без вызова конструктора:

12. Заключение

В этом уроке мы рассмотрели инициализацию полей в Java. Мы обнаружили различные типы данных в Java и способы их использования. Мы также подробно рассмотрели несколько способов создания объектов в Java.

Полную реализацию этого руководства можно найти на Github .

Источник

BestProg

Инициализация переменных в методах класса. Инициализация полей (членов данных) класса. Способы инициализации членов данных класса

Данная тема демонстрирует способы инициализации внутренних членов данных класса в языке программирования Java.

Содержание

Поиск на других ресурсах:

1. Понятие инициализации переменных в методах в Java

Инициализация переменной означает явное (или неявное) установление некоторого значения переменной.

В языке программирования Java переменные, объявленные в методе, обязательно должны быть инициализированы перед их использованием.

Если в теле некоторого метода класса, попробовать использовать объявленную, но не инициализированную переменную, то компилятор выдаст ошибку.

Например. В нижеследующем фрагменте кода происходит попытка использовать переменную t , которая объявлена но не инициализирована

В этом случае выдается сообщение об ошибке:

Чтобы исправить ситуацию, нужно переменной t присвоить какое-то значение перед ее использованием.

2. Какие существуют способы инициализации членов данных класса?

В Java можно инициализировать переменную, если она является членом класса. Существует четыре способа инициализации членов данных класса:

  • инициализация по умолчанию (неявная инициализация);
  • явная инициализация начальными значениями (константными значениями);
  • явная инициализация методами класса;
  • инициализация с помощью конструкторов классов.
3. Инициализация полей данных класса. Что такое инициализация полей данных класса по умолчанию?

Если переменная есть членом данных класса, то эта переменная инициализируется значением по умолчанию при ее объявлении.

То есть, если есть класс в котором объявлены внутренние переменные (поля класса)

то эти переменные ( d , x ) будут инициализированы значением по умолчанию. В вышеприведенном коде переменным по умолчанию будут присвоены следующие значения

Не имеет значения, какой идентификатор доступа используется для переменной ( private , protected , public ) в классе.

4. Какие значения по умолчанию присваиваются полям класса для разных типов?

При объявлении переменной в некотором классе, этой переменной присваиваются значения по умолчанию. Ниже приведены значения по умолчанию, которые присваиваются переменным разных типов

Символьной переменной типа char присваивается нуль-символ, который отображается в виде символа «пробел».

5. Каким значением инициализируется переменная-ссылка на объект класса?

Если в классе объявляется переменная-ссылка на объект некоторого класса, то по умолчанию, значение этой ссылки равно null .

Нижеследующий фрагмент кода демонстрирует это.

В вышеприведенном примере переменная obj есть ссылкой (reference) на класс InnerClass . Другими словами obj это объект класса InnerClass . Поскольку, память для obj еще не выделена, то по умолчанию значение obj = null .

6. Явная инициализация. Каким образом осуществляется явная инициализация членов данных класса начальными значениями?

Явная инициализация означает установление начального (нужного) значения переменной при ее объявлении в классе.

Например. В классе MyClass реализована инициализация начальными значениями переменных разных типов.

7. Каким образом осуществляется явная инициализация членов данных класса, которые есть переменными-ссылками на класс

Если членом данных класса есть переменная-ссылка на некоторый класс (объект класса), то она инициализируется стандартным способом с помощью оператора new:

В классе MyClass переменная-ссылка obj перед ее использованием обязательно должна быть инициализирована оператором new . Если попробовать использовать неинициализированную переменную, которая есть ссылкой на класс, возникнет критическая ситуация (исключение).

8. Явная инициализация с помощью вызова методов. Каким образом инициализируется значение члена данных класса с помощью вызова метода?

При объявлении, члены данных класса могут быть инициализированы вызовом некоторого метода.

Например. Пусть задан класс CRadius . В классе CRadius инициализируются члены данных len, area, volume с помощью вызова методов Length() , Area() , Volume() . Эти методы вычисляют соответственно длину окружности, площадь круга и объем шара радиуса r , который есть входным параметром методов.

9. Какой порядок инициализации при объявлении переменных? Какое значение имеет порядок инициализации при объявлении переменных? Примеры

В классе переменные инициализируются в первую очередь. Инициализация переменных происходит даже перед вызовом конструктора класса. Порядок инициализации переменных определяется порядком их объявления в классе (см. пример 1). После инициализации переменных вызывается конструктор. При этом, объявление и инициализация переменных могут быть реализованы в любом месте класса (см. пример 2).

Как видно из программного кода в пункте 8, переменные объявляются в строго определенной последовательности, в которой значение инициализирующих переменных и методов (справа от операции присваивания) было определено на момент инициализации.

Пример 1. Пусть задан класс CInitOrderClass , в котором значение следующего члена данных инициализируется значением предшествующего члена данных или метода.

Если в классе изменить порядок объявления и инициализации, то может возникнуть ошибка. Например, если объявление переменной t4 поместить на самый верх объявлений членов данных класса:

то возникнет ошибка компиляции

Это логично, поскольку просмотр объявлений переменных происходит сверху-вниз (от начала до конца). На момент объявления переменной t4 , переменные t1 и t3 , которые принимают участие в инициализации, еще не объявлены. Это есть причиной возникновения ошибки.

Это не касается метода класса SomeMethod() , который может использоваться при инициализации в любом месте класса.

Пример 2. Данный пример демонстрирует правило, в котором любая внутренняя переменная класса (член данных класса) инициализируется первой, даже перед вызовом конструктора.

Пусть дана реализация класса COrderInit , в котором инициализируются три переменные a, b, c с помощью метода InitMethod() и с помощью конструктора COrderInit() .

Как видно из вышеприведенного кода, класс содержит функцию main() , в которой создается объект класса COrderInit . Метод класса InitMethod() получает входным параметром строку s . Эта строка выводит строку инициализации с именем соответствующей переменной.

В результате выполнения такого кода будет выведен следующий результат:

Результат показывает, что первой происходит инициализация переменных a , c , b . Порядок инициализации переменных определяется порядком их объявления в классе. После этого происходит вызов конструктора.

10. Каким образом осуществляется инициализация с помощью конструктора?

Инициализация членов данных класса с помощью конструктора более подробно описывается в теме:

11. Каким образом можно инициализировать члены данных класса с помощью секции инициализации < >? Пример

Члены данных класса можно инициализировать в одной секции, как показано в примере.

12. Что выполняется первым: секция инициализации или конструктор?

Первым выполняется секция инициализации а потом уже конструктор класса.

Связанные темы

Программирование: теория и практика

Рубрики

  • C# (160)
    • Практика (42)
      • MS Visual Studio 2010 (34)
      • MS Visual Studio 2017 (7)
      • MS Visual Studio 2019 (10)
    • Теория (118)
  • C++ (130)
    • Практика (31)
      • Borland C++ Builder 2007 (16)
      • MS Visual Studio 2010 (18)
    • Теория (100)
      • Visual C++ (95)
  • Java (92)
    • Практика (6)
    • Теория (86)
  • Kotlin (17)
    • Практика (1)
    • Теория (16)
  • Pascal/Delphi (35)
    • Практика (19)
      • Delphi-7 (3)
      • Embarcadero RAD Studio 2010 (17)
    • Теория (16)
  • Python (87)
    • Практика (4)
    • Теория (83)
  • Базы данных (42)
  • Компьютерная графика (3)
  • Курсовые работы (7)
  • Математическое ПО (9)
  • Паттерны (19)

Свежие записи

  • Kotlin. Цикл for. Способы реализации 13 декабря, 2021
  • Python. Выражения-генераторы 8 декабря, 2021
  • Python. Функции-генераторы. Инструкция yield. Методы next(), iter(), send() 3 декабря, 2021
  • Kotlin. Циклы. Основные понятия. Циклы while, do-while 1 декабря, 2021
  • C++. Битовые поля в структурах. 28 ноября, 2021
  • Pascal. Указательные типы Pointer, ^. Текстовый тип Text 19 ноября, 2021
  • Pascal. Логические типы. Символьные типы. Строчные типы 17 ноября, 2021
  • Pascal. Типы данных. Стандартные типы данных. Целые типы. Порядковые типы 17 ноября, 2021
  • Kotlin. Перегрузка функций. Имена функций в обратных кавычках 14 ноября, 2021
  • Java. Класс Enum. Методы класса Enum 14 ноября, 2021

При использовании материалов сайта, ссылка на сайт обязательна.

Источник

Оцените статью