1. Вступ
Коли ви лише починаєте програмувати, здається, що можна просто писати код рядок за рядком — і все запрацює. Але щойно програма ускладнюється, у голові з’являється плутанина: що де лежить, навіщо це написано, і якщо потрібно змінити один рядок — де його взагалі шукати?
Тому Java, як і більшість сучасних мов, пропонує спосіб «розкладати» код по поличках, щоб у будь‑який момент можна було зрозуміти, що робить програма, та швидко знайти потрібне місце.
Уявіть собі компанію. У ній є відділ кадрів, бухгалтерія, ІТ‑відділ, відділ логістики тощо. У кожного відділу — своя зона відповідальності, свої працівники та завдання.
У програмі на Java кожен такий «відділ» — це клас. Один клас відповідає, наприклад, за роботу з користувачами, інший — за обчислення, третій — за роботу з файлами.
Ось типова структура простого проєкту:
- Main.java — головний офіс: тут міститься «точка входу», звідки все починається.
- User.java — відділ, де зберігаються та обробляються дані про користувача.
- Calculator.java — відділ обчислень.
- FileHelper.java — фахівці з файлів.
Навіть у зовсім маленькій програмі зазвичай є бодай один клас. А великі проєкти — це вже цілий «хмарочос» із сотень класів!
2. Клас — це коробка з інструментами
Java — це об’єктно‑орієнтована мова, і усе в ній є об’єктами. Типи об’єктів називаються класами.
Клас — це як коробка або шафка, куди ми складаємо потрібні нам речі: змінні та методи. Уявіть коробку з написом «Молотки»: усередині лежать лише інструменти, повʼязані з молотками.
class Example
{
// Тут будуть наші інструменти: змінні та методи
}
Класи зазвичай містять змінні та функції. У Java змінні класу прийнято називати полями, а функції класу — методами. Але сенс від цього не змінюється.
Памʼятаєте наш перший код?
System.out.println("Всім привіт!");
У цьому коді є і клас, і методи:
- System — це клас, який містить методи для роботи з системою.
- out — це поле, яке є об’єктом класу PrintStream.
- println — це метод класу PrintStream, який виводить текст на екран.
Усе програмування певною мірою зводиться до написання власних класів і методів, які викликають методи інших класів.
3. Скорочений запис методу main()
Мінімальна програма на Java виглядає ось так:
class Program
{
public static void main(String[] args)
{
// Тут ваш код
}
}
Вона має містити принаймні один клас із методом main такого заголовка (сигнатури):
public static void main(String[] args)
main у Java
Проте в Java 21 зʼявилася можливість писати метод main() у скороченій формі. Java‑компілятор згодом (під час компіляції) перетворить його на коректний метод main().
Тож щоразу, коли ви пишете код на кшталт:
void main()
{
Scanner console = new Scanner(System.in);
int age = console.nextInt();
System.out.println("Вік: " + age);
}
Java‑компілятор перетворює його на такий код:
class Program
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int age = console.nextInt();
System.out.println("Вік: " + age);
}
}
4. Типовий Java‑клас
Типовий Java‑клас виглядає приблизно так:
public class MathUtils
{
// Статичні змінні (глобальні для класу)
static final double PI = 3.14159;
static int callCounter = 0;
// Статичний метод: обчислення площі кола
public static double circleArea(double radius)
{
callCounter++;
return PI * radius * radius;
}
// Статичний метод: пошук максимуму з двох чисел
public static int max(int a, int b)
{
callCounter++;
return (a > b) ? a : b;
}
// Статичний метод: скільки разів викликали методи
public static int getCallCount()
{
return callCounter;
}
// Звертаємося до полів і методів із методу main()
public static void main(String[] args)
{
System.out.println("Площа кола: " + circleArea(5));
System.out.println("Максимум: " + max(10, 42));
System.out.println("Методи викликалися " + getCallCount() + " разів");
}
}
Що тут маємо:
- Клас може мати багато методів.
- Клас може мати свої змінні.
- Методи класу можуть викликати один одного.
- Методи класу можуть звертатися до спільних змінних.
- Перед кожним методом є однакові «чарівні слова» на кшталт: public static.
- Перед кожним методом є різні типи: int, double, void.
Нижче розберемо всі ці нюанси.
5. Поля (змінні) класу — це його памʼять
Всередині класу можна зберігати змінні, які часто називають полями (fields). Це як комірки памʼяті, куди ми складаємо якісь дані.
public class MathUtils
{
// Статичні змінні (глобальні для класу)
static final double PI = 3.14159;
static int callCounter = 0;
}
Поля дозволяють класу щось памʼятати між викликами різних методів. Наприклад, рахувати, скільки разів натискали кнопку. Або скільки разів було викликано метод (callCounter). Полів може бути скільки завгодно.
6. Методи — дії, які може виконувати клас
Методи — це «уміння» нашого класу. Якщо клас — співробітник, то методи — це його навички: що він уміє робити.
Наприклад, метод може:
- вивести щось на екран,
- порахувати суму двох чисел,
- прийняти дані «на вхід» і повернути результат.
Будова методу:
- Тип значення, що повертається (наприклад, void — якщо нічого не повертає, або int — якщо повертає число).
- Імʼя методу (наприклад, circleArea).
- Параметри в дужках (можуть бути відсутніми).
- Фігурні дужки { ... } — тіло методу.
public class MathUtils
{
// Статичний метод: обчислення площі кола
public static double circleArea(double radius)
{
callCounter++;
return PI * radius * radius;
}
// Статичний метод: пошук максимуму з двох чисел
public static int max(int a, int b)
{
callCounter++;
return (a > b) ? a : b;
}
}
Детальніше про методи й усі повʼязані з ними нюанси ви дізнаєтеся в найближчих лекціях.
7. Модифікатори доступу
У Java можна визначати, які частини класу доступні з інших класів, а які лишаються тільки для внутрішніх потреб. Для цього використовуються модифікатори доступу.
- public — видно всім. Такі методи й поля можна використовувати або викликати з будь‑якого місця програми.
- private — видно тільки всередині самого класу. Це внутрішні деталі, які не мають бути доступні іншим. Наче їх узагалі не існує.
public class MathUtils
{
// Статичні змінні (глобальні для класу)
private static final double PI = 3.14159;
private static int callCounter = 0;
// Статичний метод: обчислення площі кола
public static double circleArea(double radius)
{
callCounter++;
return PI * radius * radius;
}
}
Золоте правило: поля зазвичай роблять private, а назовні «виносять» тільки потрібні методи з модифікатором public. Детальніше про модифікатори доступу — у найближчих лекціях.
8. Статичні методи та змінні
Зазвичай у Java клас використовують як шаблон для створення об’єктів. Ви пишете свій клас, далі створюєте об’єкти цього класу за допомогою ключового слова new, а потім викликаєте методи цих об’єктів.
Втім, є й другий спосіб використання класу — як контейнер для глобальних змінних і методів, які можна викликати з будь‑якого місця програми. Саме для цього використовується ключове слово static. Воно повідомляє Java‑компілятору, що методи й поля класу привʼязані не до об’єкта класу, а безпосередньо до самого класу. Тому їх можна викликати взагалі без створення об’єктів класу.
До речі, ви постійно користуєтеся такими методами:
Integer.parseInt(); // Статичний метод parseInt() у класі Integer
String.valueOf(); // Статичний метод valueOf() у класі String
Double.isInfinite(); // Статичний метод isInfinite() у класі Double
Arrays.copy(); // Статичний метод copy() у класі Arrays
Метод main() завжди оголошується статичним, адже з нього починається виконання вашої Java‑програми. І це відбувається ще до створення будь‑яких об’єктів.
9. Порада в IntelliJ IDEA
Повна сигнатура методу main() виглядає так:
public static void main(String[] args)
Щоб не писати її щоразу в IntelliJ IDEA, можна скористатися скороченням. Просто наберіть psvm і натисніть Tab — IntelliJ IDEA сама за вас напише ось такий код:
public static void main(String[] args)
{
}
Запамʼятати її легко — psvm — це перші літери від public static void main.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ