Итоги: Счетчик и утилиты
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 19 из 87.
Задание
ЛегкоДавайте создадим полноценную систему, которая объединяет класс Counter для отслеживания экземпляров с утилитарным классом MathUtils — объединив все, что вы узнали о статических переменных, статических методах, статических блоках и константах.
Вы создадите три файла для организации вашего кода:
Counter.java: Создайте класс, который отслеживает количество созданных экземпляров:- Приватная статическая переменная для подсчета общего количества экземпляров
- Приватная переменная экземпляра
id, которая хранит уникальный идентификатор каждого счетчика - Конструктор, который увеличивает общий счетчик и присваивает текущее значение счетчика в качестве id этого экземпляра
- Метод
getId(), который возвращает уникальный id этого счетчика - Статический метод
getTotalCount(), который возвращает количество созданных объектов Counter
MathUtils.java: Создайте утилитарный класс только со статическими членами (экземпляры которого никогда не создаются):- Публичная константа
PIсо значением3.14159 - Публичная константа
HALFсо значением0.5 - Статический метод
square(int n), который возвращает n в квадрате - Статический метод
cube(int n), который возвращает n в кубе - Статический метод
circleArea(double radius), который возвращает PI * radius * radius
- Публичная константа
Main.java: Продемонстрируйте совместную работу обоих классов. Вы получите два входных значения: число для математических операций и количество объектов Counter, которые нужно создать. Выведите следующее:Square: [value]Cube: [value]Circle area (radius=[number]): [value](площадь, отформатированная до 2 знаков после запятой)- Для каждого созданного Counter выведите:
Counter [id] created - В конце:
Total counters: [count]
Вы получите два входных значения: число (int) для математических вычислений и количество (int) объектов Counter, которые необходимо создать.
Не забудьте обращаться к статическим членам через имя класса (например, MathUtils.PI и Counter.getTotalCount()) и использовать String.format("%.2f", value) для форматирования десятичных значений.
Попробуйте сами
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
int count = scanner.nextInt();
// TODO: Используйте статические методы MathUtils для вычисления и вывода:
// - Square: [value]
// - Cube: [value]
// - Circle area (radius=[number]): [value] (отформатировано до 2 знаков после запятой)
// TODO: Создайте количество объектов Counter, равное 'count'
// Для каждого созданного Counter выведите: Counter [id] created
// TODO: Выведите общее количество созданных счетчиков
// Total counters: [count]
}
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»