Как сделать класс consumer java

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

В этой статье рассматривается класс-оболочка в java с эквивалентными объектами класса-оболочки примитивных типов данных с примерами автоматической упаковки и распаковки.

Автор оригинала: Waseem.

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

  • Что Такое Класс Java – Оболочки?
  • Необходимость Класса Оболочки В Java
  • Автобокс
  • Распаковка

Что Такое Класс Java – Оболочки?

Класс-оболочка предоставляет механизм преобразования примитивных типов данных в объекты класса-оболочки. Ниже приведены эквивалентные объекты класса-оболочки примитивных типов данных.

Ниже приведен пример, показывающий, как можно создать объект класса java-оболочки.

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

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

  1. Значение()
  2. Значение()
  3. Короткое значение()
  4. Длинное значение()
  5. Двойное значение()
  6. charValue()
  7. Плавающее значение()
  8. логическое значение()

Ниже приведен пример использования этих методов в программе:

Аналогичным образом вы можете использовать другие методы, такие как double Value (), shortValue (), longValue (), byte Value (), чтобы получить соответствующие значения объектов класса-оболочки.

Потребность В Классе Java-Оболочки

  • Они преобразуют примитивные типы данных в объекты.
  • Объекты необходимы для изменения аргументов в методе.
  • Классы в пакете java.util работают только с объектами.
  • Структуры данных в структуре коллекции хранят только объекты.
  • Объекты помогают в синхронизации при многопоточности.

Автобокс

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

Распаковка

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

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

У вас есть к нам вопрос? Пожалуйста, упомяните об этом в разделе комментариев статьи “Класс-оболочка в Java”, и мы свяжемся с вами как можно скорее.


Класс - это "шаблон для объекта", который Вы создаете в Java. Понятие класса, как и понятие объекта, являются основой ООП (если Вы не знаете, что такое ООП, - прочитайте статью "Что такое ООП").

Но давайте сначала подумаем, что Вы уже знаете про класс. Думаете, ничего? Скорее всего, это не так. Вы столько раз создавали классы, сколько создавали новые проекты. Например, вот код из одной из наших предыдущих статей по Java Start:

Заметили - начинается код со строки " class Test". Действительно, методы, которые Вы прописывали раньше в процессе обучения, не могут существовать вне какого-нибудь класса.

Но до этого Вы видели только часть их возможностей - а эти возможности ого-го какие 🙂 Давайте с ними разберемся!

Классы - "внутри" и "снаружи"

Если Вы помните, что такое "инкапсуляция", то понимаете, что интерфейс - то, что видит конечный пользователь, и то, как механизм устроен внутри - совершенно разные вещи. Точно так же и классы в Java имеют внешний "интерфейс" и внутреннюю "начинку". Для создания класса Вам понадобится уметь работать и с тем, и с другим.


Снаружи. Как создать "объект класса"

Если, как уже было сказано, класс - это "трафарет", тогда то, что мы нарисовали по этому трафарету - это "объект класса". Вот, к примеру, создаются объекты класса "карандаш" 🙂

Тем не менее, Вы должны запомнить, как создается объект какого-нибудь класса. В общей форме, это будет выглядеть вот так:


То-есть, сначала указывается название класса, например "Cat". Потом, мы присваиваем имя конкретному экземпляру класса - по этому имени Вы будете к нему обращаться далее в программе. Например, "Васька". Дальше ставится равно, пишется "new" и снова повторяется название Вашего класса.


Словом "new" Вы даете команду создать новый экземпляр класса. В скобочках в конце может ничего не стоять. Тем не менее, для создания некоторых объектов (т.е. "экземпляров класса") понадобятся первоначальные параметры. Их-то и надо будет указывать в скобках.

Даже если и так, то можем успокоить - Вы уже это делали! Только не со своими классами, и с классами, заданными в библиотеках Java. Давайте посмотрим на примере:

Java – это объектно-ориентированный язык программирования. Java состоит из основополагающих компонентов:

  • Полиморфизм
  • Наследование
  • Инкапсуляция
  • Абстракция
  • Классы
  • Объекты
  • Пример
  • Метод

Рассмотрим компоненты – классы и объекты Java.

  • Объект – имеет состояние и поведение. Например: у кошки есть такие состояния: раскраска, возраст, порода, и поведение – прыгать, мяукать, спать. Объект является экземпляром класса.
  • Класс – можно определить как шаблон/план, описывающий поведение/состояние, поддерживаемое объектом его типа.

Объекты в Java

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

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

создание объектов Java

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

Описание классов в Java

Класс – это компонент языка Java, из которого создаются отдельные объекты.
Ниже приведен образец класса.

Класс может содержать в себе типы переменных:

  • Локальные – переменные, определенные внутри методов, конструкторов или блоков, называются локальными переменными. Переменная будет объявлена ​​и инициализирована в методе, а переменная будет уничтожена после завершения метода.
  • Переменные экземпляра – это переменные внутри класса, но вне какого-либо метода. Эти переменные инициализируются, когда создается экземпляр класса. К переменным экземпляра можно получить доступ из любого метода, конструктора или блоков этого конкретного класса.
  • Переменные класса – это переменные, объявленные внутри класса, вне любого метода, с ключевым словом static.

описание класса

Класс может иметь бесконечно много методов для доступа к значению различных видов методов. В приведенном выше примере barking(), hungry() и sleep() являются методами.
Ниже приведены некоторые важные темы, которые необходимо знать при изучении классов.

Описание конструкторов

У каждого класса есть конструктор. Если мы явно не пишем конструктор для класса, компилятор Java создает конструктор по умолчанию для этого класса.

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

Java также поддерживает Singleton Classes(Одноэлементные), где вы сможете создать только один экземпляр класса.

Построение объекта

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

Ниже приведен пример создания объекта

Если мы скомпилируем и запустим вышеуказанную программу, то она даст следующий результат:

Введенное имя: Томми

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

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

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

Если мы скомпилируем и запустим вышеуказанную программу, то она даст следующий результат:

Имя выбрано: Томми
Возраст щенка: 2
Значение переменной: 2

Правила объявления исходного файла

Теперь рассмотрим правила объявления исходного файла.

  • В исходном файле может быть только один открытый класс.
  • Исходный файл может иметь несколько закрытых классов.
  • Публичным именем класса должно быть также имя исходного файла, к которому в конце должен быть добавлен .java. Например: имя класса – публичный класс Employee <>, тогда исходный файл должен быть как Employee.java.
  • Если класс определен внутри пакета, оператор пакета должен быть первым оператором в исходном файле.
  • Если присутствуют операторы импорта, они должны быть записаны между оператором пакета и объявлением класса. Если нет никаких операторов пакета, то оператор импорта должен быть первой строкой в ​​исходном файле.
  • Операторы import и package будут относиться ко всем классам, присутствующим в исходном файле. Невозможно объявить разные операторы импорта и / или пакета для разных классов в исходном файле.

У классов есть несколько уровней доступа, и есть разные типы классов; абстрактные классы, финальные классы и т. д.

Помимо вышеупомянутых типов классов, в Java также есть некоторые специальные классы, называемые классами Inner и классами Anonymous(анонимные).

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

Если задано полное имя, которое включает пакет и имя класса, тогда компилятор может легко найти исходный код или классы. Оператор импорта – это способ дать правильное местоположение компилятору для поиска этого конкретного класса.
Например, следующая строка попросит компилятор загрузить все классы, доступные в каталоге java_installation / java / io -
import java.io. *;

Для нашего примера мы создадим два класса. Это Employee и EmployeeTest.
Сначала откройте блокнот и добавьте следующий код. Помните, что это класс Employee, а этот класс является публичным. Теперь сохраните этот исходный файл с именем Employee.java.

Класс Employee имеет четыре переменных экземпляра – имя, возраст, назначение и зарплата. У класса есть один явно определенный конструктор, который принимает параметр.

Чтобы запустить класс Employee, должен быть метод main и объекты должны быть созданы. Необходимо создавать отдельный класс для этих задач.

Ниже воспроизведён класс EmployeeTest, создающий два класса Employee и обращается к методам для каждого объекта, чтобы назначить значения для каждой переменной.
Сохраните следующий код в файле EmployeeTest.java.

Теперь скомпилируем оба класса и запустим EmployeeTest:

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

Синтаксис

Ниже приведен синтаксис для записи вложенного класса. Здесь класс Outer_Demo – это внешний класс, а класс Inner_Demo – вложенный класс.

Вложенные классы в Java делятся на два типа:

Внутренние классы (нестатические вложенные классы)

Внутренние классы — это механизм безопасности в Java. Мы уже знаем, что класс не может быть связан с модификатором доступа private, но если у нас есть класс как член другого класса, то внутренний класс может быть private. И это также используется для доступа к закрытым (private) членам класса.

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

  • внутренний класс;
  • локальный метод внутреннего класса;
  • анонимный внутренний класс.

Внутренние классы

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

Ниже приведен пример создания внутреннего класса и получения доступа к нему. В данном примере мы делаем внутренний класс private и получаем доступ к классу с помощью метода.

Пример

Здесь Вы можете заметить, что Outer_Demo – внешний класс, Inner_Demo – внутренний класс, display_Inner() – метод, внутри которого мы создаем внутренний класс, и этот метод вызывается из основного метода.

Если Вы скомпилируете и выполните вышеуказанную программу, Вы получите следующий результат:

Доступ к частным (private) членам

Как упоминалось ранее, внутренние классы также используются в Java для доступа к закрытым членам класса. Предположим, у класса есть private члены. Для доступа к ним напишите в нем внутренний класс, верните частные члены из метода внутри внутреннего класса, скажем, методом getValue() и, наконец, из другого класса (из которого Вы хотите получить доступ к закрытым членам) вызовите метод getValue() внутреннего класса.

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

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

Пример

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

Локальный метод внутреннего класса

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

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

Пример

Получим следующий результат:

Анонимные внутренние классы в Java

Анонимный внутренний класс — это внутренний класс, объявленный без имени класса. В случае анонимных внутренних классов в Java мы объявляем и создаем их в одно и то же время. Как правило, они используются всякий раз, когда Вам необходимо переопределить метод класса или интерфейса. Синтаксис анонимного внутреннего класса в Java выглядит следующим образом:

Синтаксис

Пример

Следующая программа показывает, как переопределить метод класса с использованием анонимного внутреннего класса.

Получим следующий результат:

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

Анонимный внутренний класс как аргумент

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

Но во всех трех случаях Вы можете в Java передать анонимный внутренний класс методу. Синтаксис передачи анонимного внутреннего класса в качестве аргумента метода:

Синтаксис

Пример

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

Если Вы скомпилируете и выполните вышеуказанную программу, то получите следующий результат:

Статический вложенный класс в Java

Статический внутренний класс — это вложенный класс, который является статическим членом внешнего класса. Доступ к нему возможен без создания экземпляра внешнего класса с использованием других статических элементов. Как и статические члены, статический вложенный класс не имеет доступа к переменным экземпляра и методам внешнего класса. Синтаксис статического вложенного класса в Java выглядит следующим образом:

Синтаксис

Пример

Создание экземпляра статического вложенного класса немного отличается от экземпляра внутреннего класса. Следующая программа показывает, как использовать статические вложенные классы.

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

Шаблоном или описанием объекта является класс (class), а объект представляет экземпляр класса. Можно провести следующую аналогию. У нас у всех есть некоторое представление о машине - наличие двигателя, шасси, кузова и т.д. Есть некоторый шаблон auto - этот шаблон можно назвать классом. Реально же существующий автомобиль auto_solaris (фактически экземпляр данного класса) является объектом этого класса.

Определение класса

Класс определяется с помощью ключевого слова сlass. Вся функциональность класса представлена его членами - полями (полями называются переменные класса) и методами. Например, класс Book мог бы иметь следующее описание :

Таким образом, в классе Book определены три переменных и один метод Info, который выводит значения этих переменных.

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

Класс Book имеет два конструктора. Первый конструктор без параметров присваивает "неопределенные" начальные значения полям. Второй конструктор присваивает полям класса значения, которые передаются через его параметры.

Так как имена параметров и имена полей класса в данном случае у нас совпадают - name, author, year, то мы используем ключевое слово this. Это ключевое слово представляет ссылку на текущий объект. Поэтому в выражении this.name = name; первая часть this.name означает, что name - это поле текущего класса, а не название параметра name. Если бы у нас параметры и поля назывались по-разному, то использовать слово this было бы необязательно.

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

Вызов конструктора класса с двумя параметрами производится с помощью ключевого слова this, после которого в скобках указывается список параметров.

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

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

После объявления переменной Book b; эта переменная еще не ссылается ни на какой объект и имеет значение null. Затем создаем непосредственно объект класса Book с помощью одного из конструкторов и ключевого слова new.

Инициализаторы

Кроме конструктора начальную инициализацию полей объекта можно проводить с помощью инициализатора объекта. Так можно заменить конструктор без параметров следующим блоком :

Методы класса

Метод класса в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-либо классу или объекту.

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

Различают простые методы и статические методы :

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

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

Кроме имени и тела (кода) у метода есть ряд других характеристик:

  • набор модификаторов;
  • тип возвращаемого значения;
  • набор аргументов (параметров).

Модификаторы метода - public, protected, private

Модификаторы метода определяют уровень доступа. В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют:

  • public : открытый — общий интерфейс для всех пользователей данного класса;
  • protected : защищённый — внутренний интерфейс для всех наследников данного класса;
  • private : закрытый — интерфейс, доступный только изнутри данного класса.

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

Для того чтобы создать статический метод, перед его именем надо указать модификатор static. Если этого не сделать, то метод можно будет вызывать только в приложении к конкретному объекту данного класса (будет нестатическим).

Класс может включать метод main, который должен иметь уровень доступа public; к нему обращается виртуальная машина Java, не являющаяся частью какого-либо пакета.

Абстрактный класс, abstract class

Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать) абстрактные методы. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Пример абстрактного класса, включающего две абстрактные функции.

Переопределение метода, Override

В реализации ReleasePrice, наследующего свойства класса Price, "реализуем" абстрактные методы и "переопределяем" метод с использованием аннотации @Override :

Перегрузка методов, overload

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

Пример класса Test с тремя перегруженными методами test :

Java рекурсия

Рекурсией называется метод (функция), которая внутри своего тела вызывает сама себя.

Рассмотрим пример рекурсивного метода вычисления факториала. Для того чтобы вычислить n!, достаточно знать и перемножить между собой (n-1)! и n. Создадим метод, реализующий описанный способ.

Указанный рекурсивный метод вычисляет факториал натурального числа.

Рассмотрим пример, вычисляющий через рекурсию n-ое число Фибоначчи. Напомним, как выглядят первые элементы этого ряда: 1 1 2 3 5 8 13 …

Суперкласс Object

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

У класса Object есть несколько важных методов:

МетодОписание
Object clone()Функция создания нового объекта, не отличающий от клонируемого
boolean equals(Object object)Функция определения равенства текущего объекта другому
void finalize() Процедура завершения работы объекта; вызывается перед удалением неиспользуемого объекта
Class getClass()Функция определения класса объекта во время выполнения
int hashCode()Функция получения хэш-кода объекта
void notify() Процедура возобновления выполнения потока, который ожидает вызывающего объекта
void notifyAll()Процедура возобновления выполнения всех потоков, которые ожидают вызывающего объекта
String toString()Функция возвращает строку описания объекта
void wait()Ожидание другого потока выполнения
void wait(long ms)Ожидание другого потока выполнения
void wait(long ms, int nano)Ожидание другого потока выполнения

Методы getClass(), notify(), notifyAll(), wait() являются "финальными" (final) и их нельзя переопределять.

Проверка принадлежности класса instanceof

Для проверки принадлежности класса какому-либо объекту необходимо использовать ключевого слова instanceof. Иногда требуется проверить, к какому классу принадлежит объект. Это можно сделать при помощи ключевого слова instanceof. Это логический оператор, и выражение foo instanceof Foo истинно, если объект foo принадлежит классу Foo или его наследнику, или реализует интерфейс Foo (или, в общем виде, наследует класс, который реализует интерфейс, который наследует Foo).

Пример с рыбками. Допустим имеется родительский класс Fish и у него есть унаследованные подклассы SaltwaterFish и FreshwaterFish. Необходимо протестировать, относится ли заданный объект к классу или подклассу по имени

Данная проверка удобна во многих случаях. Иногда приходится проверять принадлежность класса при помощи instanceof, чтобы можно было бы разделить логику кода:

Импорт класса import

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

За ключевым словом следуют класс, который нужно импортировать. Имя класса должно быть полным, то есть включать свой пакет. Чтобы импортировать все классы из пакета, после имени пакета можно поместить '.*;'

IDE Eclipse упрощает импорт. При написании кода в редакторе Eclipse можно ввести имя класса, а затем нажать Ctrl+Shift+O. Eclipse определяет, какие классы нужно импортировать, и добавляет их автоматически. Если Eclipse находит два класса с одним и тем же именем, он выводит диалоговое окно с запросом, какой именно класс вы хотите добавить.

Статический импорт

Существует ещё статический импорт, применяемый для импорта статических членов класса или интерфейса. Например, есть статические методы Math.pow(), Math.sqrt(). Для вычислений сложных формул с использованием математических методов, код становится перегружен. К примеру, вычислим гипотенузу.

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

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

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

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

Читайте также: