1. Модифікатори доступу

Перед кожним методом програміст може вказати так звані модифікатори доступу. До них належать ключові слова: public, protected, private.

Ці «модифікатори доступу» дають змогу обмежувати доступ до методу з інших класів.

Приміром, якщо перед оголошенням методу написати ключове слово private, цей метод можна буде викликати тільки з того самого класу, в якому його оголошено. Ключове слово public дозволяє звертатися до позначеного методу з будь-якого методу будь-якого класу.

Всього таких модифікаторів 3, а типів доступу до методу — 4, адже відсутність модифікатора доступу теж щось означає.

Доступ із…
Модифікатори Будь-якого класу Класу-спадкоємця Свого пакету Свого класу
public Є Є Є Є
protected Немає Є Є Є
без модифікатора Немає Немає Є Є
private Немає Немає Немає Є

1. Модифікатор public.

До методу (змінної або класу), позначеного модифікатором public, можна звертатися з будь-якого місця програми. Це найвищий ступінь відкритості — жодного обмеження немає.

2. Модифікатор private.

До методу (змінної або класу), позначеного модифікатором private, можна звертатися тільки з того самого класу, в якому його оголошено. Для решти класів позначені метод або змінна — невидимі й «наче не існують». Це найвищий ступінь замкнутості — тільки свій клас.

3. Без модифікатора (модифікатор за замовчуванням).

Якщо метод або змінну не позначено жодним модифікатором, вважається, що їх позначено «модифікатором за замовчуванням». Змінні або методи з таким модифікатором (тобто взагалі без жодного) видно всім класам пакету, в якому їх оголошено. І тільки їм. Цей модифікатор також іноді називають package — з натяком на те, що доступ до змінних і методів відкрито для всього пакету, в якому міститься їхній клас.

4. Модифікатор protected.

Якщо метод позначено модифікатором protected, до нього можна звертатися з того самого класу, того самого пакету й класів-спадкоємців (класів, успадкованих від класу, в якому оголошено метод). Цю тему ми розберемо докладніше в квесті Java Core.

До кінця квесту Java Syntax ви можете всім своїм методам (а також класам і змінним класу) призначати модифікатор public. Інші модифікатори вам знадобляться, коли ми почнемо глибоко вивчати ООП.

Навіщо потрібні модифікатори доступу?

Вся річ у великих проєктах, які пишуть десятки й сотні програмістів одночасно.

Трапляються ситуації, коли програміст хоче поділити занадто великий метод свого класу на частини й винести частину коду в допоміжні методи. Разом з тим він не хоче, щоб інші програмісти викликали ці допоміжні методи, оскільки в такому разі код його класу може працювати неправильно.

Отож і придумали відповідні модифікатори доступу. Позначте допоміжний метод словом private, і жоден код, окрім вашого класу, не зможе побачити ваш допоміжний метод.



2. Ключове слово static

Ключове слово static перетворює метод на статичний. Що це таке, ми розглянемо згодом, а зараз просто запам'ятаймо пару фактів про статичні методи.

Факт 1. Статичний метод не прив'язано до жодного об'єкта, проте він належить до класу, в якому його оголошено. Щоб викликати статичний метод, слід написати:

Ім'яКласу.ім'яМетоду()

Приклади статичних методів:

Ім'я класу Ім'я статичного методу
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

Ім'я класу перед іменем статичного методу можна не писати, якщо ви викликаєте статичний метод з того самого класу. Саме тому немає потреби щоразу писати Solution перед іменами статичних методів, які ви викликаєте.

Факт 2. Статичний метод не може звертатися до нестатичних методів свого класу. Статичний метод може звертатися лише до статичних методів. Отож усі методи, які ми хочемо викликати з методу main, ми оголошуємо статичними.

Чому? Ви самі зможете відповісти на це запитання, коли почнете вивчати ООП і зрозумієте, як влаштовано статичні методи.



3. Ключове слово throws

Є ще одне ключове слово, яке ви, мабуть, бачили поруч з оголошенням методу — це слово throws. Його, на відміну від модифікаторів доступу та ключового слова static, розміщують після параметрів методу:

public static тип ім'я(параметри) throws Exception
{
   код методу
}

Який зміст воно несе, ми з'ясуємо трохи згодом, коли будемо вивчати винятки.

Однак, якщо побіжно торкнутися його, можна сказати, що в методі, позначеному словом throws, можуть виникати помилки (винятки) типу Exception (в цьому класі та в успадкованих від нього класах). Якщо в класі можуть виникнути помилки кількох типів, слід перелічити всі типи через кому.


4. Метод main

Рядок, в якому оголошується метод з усіма модифікаторами, впливатиме на те, як цей метод буде викликатися з інших класів і методів, а також на те, результат якого типу він повертатиме та які помилки можуть виникати під час його роботи.

Такий рядок називається оголошенням методу. Ось його загальний вигляд:

модифікатори доступу static тип ім'я(параметри) throws винятки
Загальний вигляд оголошення методу

де модифікатори доступу — це public, protected, private або нічого;

static пишемо, якщо метод статичний (не пишемо для нестатичних методів);

тип — тип результату функції (void, якщо результату немає).

Тепер ви вже, напевно, розумієте, що означають усі ключові слова під час оголошення методу main:

public static void main(String[] args) throws Exception
Оголошення методу main

Доступ до методу main() можливий із будь-якого класу, про це говорить слово public.

Метод статичний (його можна явно викликати у вигляді Solution.main()).

Метод main не повертає жодного результату. Тип результату — void (порожній тип/заглушка)

Метод main отримує параметри (!): масив рядків. І назва args натякає на «аргументи програми». Під час запуску програми в неї можна передати параметри — масив рядків. Вони й будуть міститися в масиві args методу main().

У методі main() можуть виникати необроблені помилки типу Exception (у цьому класі та в успадкованих від нього класах).