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)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Dmytrii Рівень 67
15 червня 2024
Для тех, кто не может найти класс Person
hidden #3421731 Рівень 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й рівень! Як успіхи?