JavaRush /Курси /Java Syntax Zero /Модифікатори методів

Модифікатори методів

Java Syntax Zero
Рівень 7 , Лекція 4
Відкрита

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 (або його нащадки).


Коментарі (22)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Dmytro Рівень 26
15 червня 2024
Для тех, кто не может найти класс Person
Ва Дим Рівень 28
17 березня 2024
цей медот настільки я зрозумів є основним і з нього запускається наш код.Як його можна запустити в іншому класі ?та і навіщо ? public static void main(String[] args)
De Stroy Рівень 10
6 квітня 2024
Ви можете викликати метод main з іншого класу, як і будь-який інший статичний метод:

public class MainClass {
    public static void main(String[] args) {
        System.out.println("Головний клас запущено.");
        // Виклик main іншого класу
        OtherClass.main(new String[]{"Аргумент1", "Аргумент2"});
    }
}

class OtherClass {
    public static void main(String[] args) {
        System.out.println("OtherClass main метод викликаний.");
        for (String arg : args) {
            System.out.println(arg);
        }
    }
}

Навіщо це може знадобитися? 1. Тестування або демонстрація: Можливо, у вас є кілька класів з main методами для тестування різних аспектів вашої програми або для демонстрації різних функціональностей. Викликаючи main іншого класу, ви можете легко переключатися між цими сценаріями. 2. Об'єднання декількох програм: У випадку, коли ваш проєкт складається з кількох модулів або програм, які раніше були незалежними, і вам потрібно їх об'єднати, ви можете використовувати виклик main методів цих модулів з головного main методу.
Олександр Рівень 18
4 листопада 2023
Тяжка лекція, здаеться в ній більше термінів ніж в усіх попередніх разом взятих... Сподіваюсь далі частіше буду цім користуватись і запам'ятаю))
Vitalii KK Рівень 9
28 жовтня 2023
шось з цією темою прямо таки туго...
Illia_Losiei Рівень 16 Expert
19 жовтня 2023
Що означає двокрапка в коді?

for (int i : array)
Олександр Рівень 18
4 листопада 2023
for (int i : array) - це синтаксис розширеного циклу (enhanced for loop), який використовується для ітерації (переліку) елементів масиву або колекції. У цьому контексті int i - це змінна, в яку кожен елемент масиву array буде поміщений один за одним під час ітерації. Короче кажучи, з кожним обертом циклу в змінну "і" буде приходити значення наступної комірки "array". P.s. Сам думав що забув якийсь оператор, чи синтаксис)))
dianosauric Рівень 42
11 вересня 2022
З кожною лекцією ніби більше деталей до пазла отримую і можу вже їх один з одним складати. Просто задоволення
MaksLem Рівень 1
3 липня 2022
Аналіз масивів. Требования: Код має компілюватися. Потрібно змінити мінімальну необхідну кількість модифікаторів доступу в класі Person. Чому в класі Person? Якщо клас Solution? Здається тут помилка
Mutaborrr Рівень 21
15 липня 2022
Там вгорі є вкладки класів. Потрібно перейти до класу Person і там виконати завдання, спираючись на взаємодію методів класів.
Pan Vitali Moroz Рівень 51
11 вересня 2022
переплуто у завданні другої задачі, замість Solution написано Person
777 Рівень 16
20 вересня 2022
там є два класи Solution і Person
Pan Vitali Moroz Рівень 51
20 вересня 2022
немає 2 класів, там 1 клас
777 Рівень 16
4 жовтня 2022
так побачив що нема, дивно, в intelliJ IDEA є🤷‍♂️
Roma Chernesh Рівень 16
17 грудня 2022
Скільки часу вже тут вчуся, а якби не цей коментар - так би і не знав, що можно класи перемикати. Спасибі!
Dmytro Zborovsky Рівень 8
19 лютого 2023
В плагині intelliJ IDEA що на веб-сайті JR, є вкладка зверху під назвою "Дерево класу", щоб пересуватися між класами, не використовуючи декстопне середовище розробки.
Василь Рівень 10 Expert
25 квітня 2023
Дуже велике дякую за коментар, а то вже і так сива голова, сивіє від такого)
Василь Рівень 4
13 липня 2023
і в intelliJ IDEA немає, всі методи реалізовані в одному класі Solution, але вони поза методом main.
Віталій Рівень 33
20 січня 2022
Чим дальше тим менше коментарів, складається враження що чим дальше тим простіше)))
Харченко Иван Рівень 15
2 лютого 2022
Все набагато простіше, просто живих студентів залишається все менше і менше, нікому комітити:)
Lipovskyi Volodymyr Рівень 36
6 травня 2022
Приємно бачити хоч когось з рівнем більше 7😉. Здається, що сюди вже ніхто не доходив, іноді)))
Valentyna Рівень 30
8 січня 2024
Оу, у вас вже 37й рівень! Як успіхи?