Перейти к основному содержимому

Простые приложения на Java

Разработчику Архитектору

Простые приложения на Java

Java представляет собой объектно-ориентированный язык программирования, который широко используется для создания настольных приложений, серверных систем и мобильных решений. Язык отличается строгой типизацией, автоматическим управлением памятью (Garbage Collection) и кроссплатформенностью благодаря виртуальной машине Java (JVM).

В данной главе рассматриваются практические примеры: консольные утилиты, мини-игра на композиции классов и первое десктопное приложение на Swing. Каждый пример демонстрирует ключевые концепции языка — строки, массивы, коллекции, файловый ввод-вывод, ООП и графический интерфейс. Короткие учебные задачи и шаблоны Scanner / BufferedReader — в Lab — консольные задачи. Галерея окон, кнопок и форм на Swing с разбором — Lab — Java Swing.


Как запускать примеры из главы

  1. Сохраните класс в Имя.java (имя совпадает с public class).
  2. Компиляция: javac Имя.java
  3. Запуск: java Имя (для public static void main в этом классе).
  4. IDE: Run в IntelliJ IDEA / Eclipse на классе с main.
  5. Нужно: 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 как основа веб-интеграций.