Простые приложения на Java
Простые приложения на Java
Java представляет собой объектно-ориентированный язык программирования, который широко используется для создания настольных приложений, серверных систем и мобильных решений. Язык отличается строгой типизацией, автоматическим управлением памятью (Garbage Collection) и кроссплатформенностью благодаря виртуальной машине Java (JVM).
В данной главе рассматриваются практические примеры: консольные утилиты, мини-игра на композиции классов и первое десктопное приложение на Swing. Каждый пример демонстрирует ключевые концепции языка — строки, массивы, коллекции, файловый ввод-вывод, ООП и графический интерфейс. Короткие учебные задачи и шаблоны Scanner / BufferedReader — в Lab — консольные задачи. Галерея окон, кнопок и форм на Swing с разбором — Lab — Java Swing.
Как запускать примеры из главы
- Сохраните класс в
Имя.java(имя совпадает сpublic class). - Компиляция:
javac Имя.java - Запуск:
java Имя(дляpublic static void mainв этом классе). - IDE: Run в IntelliJ IDEA / Eclipse на классе с
main. - Нужно: JDK 17+ (
java -version).
У каждого раздела ниже — уточнения в Как запустить.
Генератор случайных паролей
Это приложение демонстрирует работу с классом String, массивами символов, интерфейсом Random и циклами. Код создает пароль заданной длины, выбирая символы из набора букв, цифр и специальных знаков.
Разбор кода
- Массивы: Хранение допустимых символов.
- Random: Генерация индексов для выбора случайного символа.
- StringBuilder: Эффективное построение итоговой строки без создания множества временных объектов.
Как запустить
- Файл:
PasswordGenerator.java - Команда:
javac PasswordGenerator.java && java PasswordGenerator - Результат:
Сгенерированный пароль: ...
Код ITЗагрузка примера кода…
Ключевые моменты:
- Использование
StringBuilderвместо конкатенации строк в цикле повышает производительность. - Метод
nextInt(int bound)возвращает случайное целое от0(включительно) доbound(исключительно). В новом коде предпочтительнееThreadLocalRandom.current().nextInt(0, bound)— см. случайные числа.
Сортировщик текстового файла
Приложение читает текст из файла, разбивает его на слова, сортирует их по алфавиту и записывает результат в новый файл. Это пример работы с потоками ввода-вывода (InputStreamReader, BufferedReader) и коллекциями (ArrayList, Collections).
Разбор кода
- NIO и IO: Классы
Files,Paths,FileReaderдля чтения данных. - Коллекции: Список
ArrayListдля хранения слов. - Сортировка: Алгоритм
Collections.sort().
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Ключевые моменты:
- Метод
Files.readString(доступен в Java 11+) упрощает чтение файлов. - Регулярное выражение
\\s+позволяет корректно разделить текст по любому количеству пробельных символов. - Обработка исключений через блок
try-catchгарантирует безопасность программы при отсутствии файла.
Консольный калькулятор
Простой интерактивный калькулятор, выполняющий арифметические операции (+, -, *, /). Пример демонстрирует работу с пользовательским вводом (Scanner), условными операторами и обработкой ошибок деления на ноль.
Разбор кода
- Scanner: Получение данных от пользователя.
- Условная логика: Оператор
switchдля выбора операции. - Типы данных: Переход от
Stringкdoubleдля вычислений.
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Характерная черта Java: Строгая проверка типов. Попытка сложить строку и число вызовет ошибку компиляции, что предотвращает многие типы runtime-ошибок.
Трекер задач в JSON
Приложение сохраняет список задач в файл формата JSON и загружает его обратно. Для работы с JSON используется библиотека org.json или встроенные возможности, но в примере ниже показана реализация на основе простого сериализатора вручную или с использованием стандартной библиотеки Jackson (предполагается наличие зависимости). Для автономности примера будет использован простой формат, имитирующий JSON, либо структура класса.
Примечание: В реальных проектах используют Jackson или Gson. Здесь представлен пример с ручным парсингом для демонстрации логики.
Разбор кода
- POJO (Plain Old Java Object): Класс
Taskдля представления задачи. - Файловая система: Создание директорий и запись/чтение файлов.
- JSON-структура: Представление данных в виде строковой формы.
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Рекомендация: Для продакшн-кода обязательно используйте библиотеку Jackson Databind или Gson. Они берут на себя всю сложность сериализации и десериализации.
Простой HTTP-сервер и клиент
Java предоставляет возможности для создания сетевых приложений через пакет java.net. Ниже приведен пример минимального сервера, слушающего порт, и клиента, отправляющего запрос.
Разбор кода
- ServerSocket: Объект для прослушивания входящих соединений.
- Socket: Объект для установления соединения.
- Потоки ввода/вывода:
InputStream,OutputStreamдля передачи данных.
Код ITЗагрузка примера кода…
Характерная черта Java: Встроенная поддержка TCP/IP на низком уровне. Не требуется подключение внешних драйверов для базовой сетевой коммуникации.
Отправитель HTTP-запросов (REST API)
Этот пример расширяет функциональность клиента, позволяя отправлять POST-запросы с данными в формате JSON. Используется HttpURLConnection для настройки заголовков и отправки тела запроса.
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Утилита для сканирования директорий
Приложение обходит структуру папок и выводит список всех файлов с указанием их размера и пути. Используется рекурсивный обход или класс Files.walk.
Разбор кода
- Files.walk: Поток путей, представляющий дерево директорий.
- Фильтрация: Исключение скрытых файлов или определенных расширений.
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Скрипт для создания резервного копирования файлов
Приложение копирует файлы из одной директории в другую с добавлением временной метки к имени файла. Это демонстрирует работу с StandardCopyOption и манипуляцию именами файлов.
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Мониторинг дискового пространства
Утилита отображает информацию о свободном и занятом месте на диске. Используется класс FileStore из пакета java.nio.file.
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Парсер URL и проверка доступности ресурса
Приложение принимает URL, разбирает его компоненты (протокол, хост, путь) и проверяет, доступен ли ресурс по HTTP.
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Конвертер форматов дат
Работа с датами в Java требует внимания к деталям. Приведен пример конвертации между старым форматом SimpleDateFormat (для совместимости) и новым API java.time (рекомендуемый стандарт с Java 8).
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Утилита для просмотра запущенных процессов
Приложение выводит список активных процессов операционной системы с их идентификаторами (PID) и названиями. В Java для этого используется класс ProcessHandle.
Как запустить
- Файл: класс с
public static void main(имя файла = имя класса). - Команда:
javac Имя.java && java Имя - Результат: вывод в консоль (см. пример).
Код ITЗагрузка примера кода…
Характерная черта Java: Класс ProcessHandle предоставляет безопасный и удобный способ взаимодействия с процессами ОС без необходимости вызова нативных библиотек.
Текстовая игра — композиция классов
Практический проект, связывающий классы, инкапсуляцию и конструкторы без наследования. Три сущности взаимодействуют через публичные методы:
Player ──► Location ──► Item
│ │
└───────────┘ (перемещение, подбор, использование)
Item — предмет с типом и значением (оружие, зелье, ключ, сокровище):
Код ITЗагрузка примера кода…
Location — локация со списком предметов:
Код ITЗагрузка примера кода…
Player — персонаж с инвентарём и текущей локацией:
Код ITЗагрузка примера кода…
Запуск сценария — создание объектов и взаимодействие:
Код ITЗагрузка примера кода…
Расширьте систему: добавьте класс Enemy, метод dropItem() у игрока и связанные локации через массив выходов. Подробнее об ООП — в статье "Объектно-ориентированное программирование в Java".
Первое десктопное приложение на Swing
Swing — встроенная в JDK библиотека для графических интерфейсов (javax.swing). Для новых проектов часто выбирают JavaFX, но Swing остаётся простым стартом: не требует отдельных зависимостей и хорошо подходит для учебных задач. Расширенная галерея (окно, кнопка, форма, меню, калькулятор) с построчным разбором — Lab — Java Swing.
Архитектура окна
JFrame (главное окно)
└── ContentPane
├── JLabel, JButton, JTextField
└── JPanel + LayoutManager (FlowLayout, BorderLayout, GridLayout)
Графический интерфейс работает в Event Dispatch Thread (EDT). Создание и изменение компонентов выполняйте через SwingUtilities.invokeLater():
Код ITЗагрузка примера кода…
Компоненты и обработка событий
Код ITЗагрузка примера кода…
Форма с валидацией
Код ITЗагрузка примера кода…
Обзор Swing, JavaFX и экосистемы GUI — в статьях JavaFX и GUI, Первая программа на JavaFX, Справочник JavaFX — элементы UI и Экосистема Java-приложений. Расширенные примеры окон и виджетов с разбором — Lab — Java Swing. Общая теория десктопа — Архитектура десктопных приложений.
Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.