5.03. Ключевые классы и интерфейсы Java
Ключевые классы и интерфейсы Java
Math
Класс java.lang.Math предоставляет набор статических методов для выполнения базовых и расширенных математических операций. Включает тригонометрические функции, логарифмы, возведение в степень, извлечение корня, работу со случайными числами и округление. Также содержит константы Math.PI и Math.E. Все методы являются static, что позволяет использовать их без создания экземпляра класса.
| Метод / Атрибут | Описание | Пример |
|---|---|---|
Math.E | Число Эйлера (e ≈ 2.718) | System.out.println(Math.E); |
Math.PI | Число Пи (π ≈ 3.14159) | System.out.println(Math.PI); |
Math.abs(x) | Возвращает абсолютное значение | Math.abs(-5) → 5 |
Math.round(x) | Округляет до ближайшего целого | Math.round(2.6f) → 3 |
Math.ceil(x) | Наименьшее целое, ≥ x | Math.ceil(1.2) → 2 |
Math.floor(x) | Наибольшее целое, ≤ x | Math.floor(1.9) → 1 |
Math.max(a, b) | Возвращает большее из двух чисел | Math.max(3, 5) → 5 |
Math.min(a, b) | Возвращает меньшее из двух чисел | Math.min(3, 5) → 3 |
Math.pow(a, b) | Возводит a в степень b | Math.pow(2, 3) → 8.0 |
Math.sqrt(x) | Квадратный корень из x | Math.sqrt(16) → 4.0 |
Math.random() | Случайное число от 0.0 до 1.0 | Math.random() → 0.73... |
Пример:
double result = Math.sqrt(Math.pow(3, 2) + Math.pow(4, 2)); // 5.0
String
Класс java.lang.String предназначен для работы с текстовыми данными. Поскольку строки в Java неизменяемы (immutable), все операции над ними возвращают новый объект. Основные методы позволяют определять длину строки, извлекать символы, сравнивать строки (с учётом и без учёта регистра), изменять регистр, удалять пробелы, выполнять поиск подстрок и разбивать строку на части. Поддерживается форматирование с помощью String.format().
| Метод / Атрибут | Описание | Пример |
|---|---|---|
str.length() | Возвращает длину строки | "hello".length() → 5 |
str.charAt(i) | Возвращает символ по индексу i | "abc".charAt(1) → 'b' |
str.equals(str2) | Сравнивает строки с учётом регистра | "Java".equals("java") → false |
str.equalsIgnoreCase(str2) | Сравнивает строки без учёта регистра | "Java".equalsIgnoreCase("java") → true |
str.toUpperCase() | Переводит строку в верхний регистр | "hi".toUpperCase() → "HI" |
str.toLowerCase() | Переводит строку в нижний регистр | "Hi".toLowerCase() → "hi" |
str.trim() | Удаляет пробелы в начале и конце строки | " hello ".trim() → "hello" |
str.indexOf(char) | Индекс первого вхождения символа | "abcab".indexOf('b') → 1 |
str.substring(start, end) | Возвращает подстроку от start до end | "Hello".substring(1, 4) → "ell" |
str.split(regex) | Разбивает строку по регулярному выражению | "a,b,c".split(",") → ["a", "b", "c"] |
String.format(...) | Форматирует строку | String.format("Name: %s", "John") → "Name: John" |
Пример:
String trimmed = " hello ".trim().toUpperCase(); // "HELLO"
OS
Класс java.lang.System предоставляет доступ к системным ресурсам и окружению. Содержит стандартные потоки ввода-вывода (in, out, err), методы для работы со временем (currentTimeMillis(), nanoTime()), управления памятью (gc()) и завершения приложения (exit()). Также позволяет получать переменные окружения и системные свойства, такие как имя ОС или версия JVM.
| Метод / Атрибут | Описание | Пример |
|---|---|---|
System.getenv() | Получает все переменные окружения | Map<String, String> env = System.getenv(); |
System.getenv(key) | Получает конкретную переменную окружения | System.getenv("PATH") |
System.getProperties() | Получает системные свойства JVM | Properties props = System.getProperties(); |
System.getProperty(key) | Получает значение системного свойства | System.getProperty("os.name") |
System.lineSeparator() | Возвращает разделитель строк | System.lineSeparator() |
System.out.println() | Выводит текст в консоль | System.out.println("Hello"); |
System.err.println() | Выводит ошибку в консоль | System.err.println("Error!"); |
System.in.read() | Чтение ввода с клавиатуры | int ch = System.in.read(); |
System.currentTimeMillis() | Возвращает время в миллисекундах | long ms = System.currentTimeMillis(); |
System.nanoTime() | Возвращает время в наносекундах | long ns = System.nanoTime(); |
System.exit(0) | Завершает работу программы | System.exit(0); |
Пример:
long start = System.currentTimeMillis();
// ... код
System.out.println("Время выполнения: " + (System.currentTimeMillis() - start) + " мс");
File
Класс java.io.File (или современный java.nio.file.Path) используется для работы с файловой системой. Позволяет проверять существование файла или каталога, создавать и удалять файлы, получать метаданные (имя, путь, размер), а также перечислять содержимое директории. Не предназначен для чтения/записи данных — это задача других классов (FileInputStream, Files и т.д.).
| Метод / Атрибут | Описание | Пример |
|---|---|---|
file.exists() | Проверяет, существует ли файл | new File("test.txt").exists() |
file.isDirectory() | Является ли директорией | new File(".").isDirectory() |
file.isFile() | Является ли файлом | new File("data.txt").isFile() |
file.getName() | Возвращает имя файла или папки | new File("data.txt").getName() → "data.txt" |
file.getAbsolutePath() | Возвращает полный путь к файлу | new File("data.txt").getAbsolutePath() |
file.createNewFile() | Создаёт новый файл | new File("new.txt").createNewFile() |
file.delete() | Удаляет файл или папку (если пустая) | new File("temp.txt").delete() |
file.mkdir() | Создаёт новую папку | new File("newdir").mkdir() |
file.listFiles() | Возвращает список файлов в директории | File[] files = new File(".").listFiles(); |
Пример:
File dir = new File(".");
if (dir.isDirectory()) {
for (File file : dir.listFiles()) {
System.out.println(file.getName());
}
}
Set & Mapping
Интерфейсы Set и Map являются частью Java Collections Framework и используются для хранения уникальных элементов и пар «ключ-значение» соответственно.
Set — коллекция без дубликатов. Реализации: HashSet (быстрый доступ, порядок не гарантируется), LinkedHashSet (сохраняет порядок вставки), TreeSet (поддерживает сортировку).
| Метод / Атрибут | Описание | Пример |
|---|---|---|
set.add(element) | Добавляет элемент | Set<String> s = new HashSet<>(); s.add("A"); |
set.contains(element) | Проверяет наличие элемента | s.contains("A") |
set.remove(element) | Удаляет элемент | s.remove("A") |
set.size() | Возвращает размер множества | s.size() |
set.isEmpty() | Проверяет, пусто ли множество | s.isEmpty() |
Map — ассоциативный массив. Реализации: HashMap, LinkedHashMap, TreeMap.
| Метод / Атрибут | Описание | Пример |
|---|---|---|
map.put(key, value) | Добавляет пару ключ-значение | map.put("name", "Alice") |
map.get(key) | Возвращает значение по ключу | map.get("name") |
map.containsKey(key) | Проверяет наличие ключа | map.containsKey("age") |
map.containsValue(value) | Проверяет наличие значения | map.containsValue("Alice") |
map.remove(key) | Удаляет запись по ключу | map.remove("name") |
map.keySet() | Возвращает набор всех ключей | Set<String> keys = map.keySet(); |
map.values() | Возвращает коллекцию значений | Collection<String> values = map.values(); |
map.entrySet() | Возвращает набор пар ключ-значение | Set<Map.Entry<String, String>> entries = map.entrySet(); |
Оба интерфейса предоставляют стандартные операции: добавление, удаление, проверка наличия, получение размера.
Пример:
Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("Alice");
uniqueNames.add("Bob");
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
int age = ages.get("Alice"); // 30
Date & DateTime
Работа с датой и временем в Java прошла эволюцию от устаревших классов Date и Calendar к современному API java.time, введённому в Java 8. Новый API иммутабелен и потокобезопасен.
Основные классы:
- LocalDate — дата без времени.
- LocalTime — время без даты.
- LocalDateTime — дата и время.
- ZonedDateTime — дата и время с учётом часового пояса.
- Duration, Period — интервалы времени.
Поддерживается форматирование через DateTimeFormatter.
| Метод / Атрибут | Описание | Пример |
|---|---|---|
new Date() | Создаёт объект текущей даты и времени | Date now = new Date(); |
LocalDate.now() | Текущая дата | LocalDate today = LocalDate.now(); |
LocalTime.now() | Текущее время | LocalTime time = LocalTime.now(); |
LocalDateTime.now() | Текущие дата и время | LocalDateTime current = LocalDateTime.now(); |
LocalDate.of(year, month, day) | Создаёт дату | LocalDate d = LocalDate.of(2023, 1, 1); |
plusDays(n) | Добавляет дни | LocalDate tomorrow = LocalDate.now().plusDays(1); |
minusDays(n) | Вычитает дни | LocalDate yesterday = LocalDate.now().minusDays(1); |
format(DateTimeFormatter) | Форматирует дату | d.format(DateTimeFormatter.ISO_DATE) |
Пример:
LocalDateTime now = LocalDateTime.now();
LocalDateTime tomorrow = now.plusDays(1);
String formatted = tomorrow.format(DateTimeFormatter.ISO_DATE_TIME); // "2025-10-31T12:30:45"
Array
Массивы в Java — это контейнеры фиксированного размера для ходинакового типа. Доступ к элементам осуществляется по индексу. Класс java.util.Arrays предоставляет утилиты для работы с массивами: сортировка, поиск, сравнение, заполнение, преобразование в строку.
Поскольку массивы не реализуют Collection, для них нет методов вроде add() или remove().
| Метод / Атрибут | Описание | Пример |
|---|---|---|
array.length | Возвращает длину массива | int[] arr = {1,2,3}; arr.length → 3 |
Arrays.toString(arr) | Преобразует массив в строку | Arrays.toString(new int[]{1,2,3}) → "[1, 2, 3]" |
Arrays.sort(arr) | Сортирует массив | Arrays.sort(arr); |
Arrays.binarySearch(arr, key) | Поиск элемента в отсортированном массиве | Arrays.binarySearch(arr, 5) |
Arrays.equals(arr1, arr2) | Сравнивает два массива | Arrays.equals(arr1, arr2) |
Arrays.fill(arr, value) | Заполняет массив определённым значением | Arrays.fill(arr, 0) |
Пример:
int[] numbers = {3, 1, 4, 1, 5};
Arrays.sort(numbers);
int index = Arrays.binarySearch(numbers, 4); // 3
Special
Специальные методы классса определены в классе Object и могут быть переопределены в пользовательских классах для изменения поведения по умолчанию.
| Метод / Атрибут | Описание | Пример |
|---|---|---|
toString() | Возвращает строковое представление объекта | obj.toString() |
equals(Object o) | Сравнивает объекты на равенство | obj1.equals(obj2) |
hashCode() | Возвращает хэш-код объекта | obj.hashCode() |
getClass() | Возвращает метаинформацию о классе | obj.getClass() |
finalize() | Вызывается перед удалением объекта GC | Не рекомендуется использовать |
clone() | Создаёт копию объекта | MyClass copy = (MyClass) obj.clone(); |
Пример:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof Person p)) return false;
return name.equals(p.name) && age == p.age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}