Фрагмент от лекция с ментор като част от курса на Codegym University. Запишете се за пълния курс.


"Поздрави, Амиго! Чувам, че вече добре разбираш методите?"

„Здравей, Риши. Да, вече си пробих път през трика на този учител. Бих казал, че не беше толкова лошо, но ти ще ми кажеш: „Не, не! Нищо не си разбрал. '"

„Очевидно си прекарвал твърде много време в чат с определени учители, вероятно с Диего. Както и да е... все още се надявам, че разбираш методите достатъчно добре. В крайна сметка днес ще те науча на някои вълшебни думи, които помагат да се очертаят методите "сфери на влияние".

— Звучи интригуващо.

„Всъщност всичко е просто. Преди всеки метод програмистите могат да определят така наречените модификатори на достъпа. Те включват следните ключови думи: public, protected, private.

„Тези модификатори за достъп ви позволяват да ограничите достъпа на други класове до метод.

„Например, ако напишете privateключовата дума преди декларация на метод, тогава методът може да бъде извикан само от същия клас, в който е деклариран. Ключовата publicдума позволява достъп до маркирания метод от всеки метод от всеки клас.

Има общо 3 такива модификатора, но има 4 вида достъп до метод. Това е така, защото липсата на модификатор за достъп също означава нещо. Ето пълна table:

Достъп от...
Модификатори Всеки клас Детски клас Пакетът му Класата му
public да да да да
protected Не да да да
без модификатор Не Не да да
private Не Не Не да

„И ето пълно обяснение на модификаторите за достъп:

1. publicмодификатор

Метод (or променлива, or клас), маркиран с publicмодификатора, може да бъде достъпен от всяко място в програмата . Това е най-високата степен на откритост — няма ограничения.

2. privateмодификатор

Метод (or променлива, or клас), маркиран с privateмодификатора, може да бъде достъпен само от същия клас, в който е деклариран . За всички останали класове маркираният метод (or променлива) е невидим. Все едно не съществува. Това е най-високото ниво на ограничение - само неговият собствен клас.

3. Без модификатор (модификатор по подразбиране)

Ако даден метод (or променлива) не е маркиран с модификатор, тогава се счита, че има „модификатора по подразбиране“. Променливите or методите с този модификатор (т.е. без ниHowъв) са видими за всички класове в пакета, в който са декларирани . И само на тях. Този модификатор също понякога се нарича package-private, намеквайки, че достъпът до променливи и методи е отворен за целия пакет, в който се намира техният клас.

4. protectedмодификатор

Ако даден метод е маркиран с protectedмодификатора, тогава той може да бъде достъпен от същия клас, същия пакет и наследници (класове, които наследяват класа, в който е деклариран методът). Ще анализираме тази тема по-подробно в търсенето на Java Core."

„Интересно, но не съм сигурен дали мога веднага да поставя тези модификатори на всички правилни места.

„Ще стигнете до там постепенно. Няма нужда да се притеснявате предварително. Докато стигнете до края на мисията на Java Syntax, можете да използвате модификатора publicза всичките си методи (Howто и класове и променливи на екземпляри). Ще ви трябват други модификатори, когато започнем активно да изучаваме ООП."

„Можете ли да обясните по-подробно защо са необходими модификатори за достъп?“

„Те стават необходими за големи проекти, писани от десетки и стотици програмисти едновременно.

„Понякога има ситуации, когато програмистът иска да раздели прекалено голям метод на части и да премести част от codeа в помощни методи. Но в същото време той or тя не иска други програмисти да извикват тези помощни методи, защото съответният code може да не работи правилно."

„Така че те излязоха с тези модификатори за достъп. Ако маркирате помощен метод с думата private , тогава никой друг code освен вашия клас не може да види вашия помощен метод.“

"Мисля, че разбирам."

staticключова дума

„Има друга интересна ключова дума. Тя е static. Не е изненадващо, че прави методите статични.“

"Какво означава това?"

„Ще ви разкажа повече за това по-късно. Не се притеснявайте. Засега просто се опитайте да запомните няколко факта за статичните методи.

Факт 1. Статичният метод не е прикачен към нито един обект, а instead of това принадлежи към класа, в който е деклариран. За да извикате статичен метод, трябва да напишете:

ClassName.MethodName()

Примери за статични методи:

Име на класа Име на статичен метод
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

Името на класа преди името на статичен метод може да бъде пропуснато, ако извикате статичния метод от неговия клас. Ето защо не е необходимо да пишете Solutionпреди имената на всеки от статичните методи, които се извикват.

Факт 2. Статичният метод не може да има достъп до нестатичните методи на собствения си клас. Статичният метод има достъп само до статични методи. В резултат на това ние декларираме всички методи, които искаме да извикаме от метода mainстатични."

"Защо така?"

„Ще си отговорите сами на този въпрос, когато започнете да изучавате ООП и разберете How работят статичните методи. Дотогава просто ми вярвайте.

throwsключова дума

„Има друга ключова дума, която вероятно сте виждали в декларация на метод – ключовата throwsдума. За разлика от модификаторите за достъп и staticключовата дума, тази ключова дума се поставя след параметрите на метода:

public static Type name(parameters) throws Exception
{
  method body
}

— И Howво значи?

„Още веднъж трябва да ви кажа, че ще научите истинската му цел по-късно, когато изучаваме изключенията (на ниво 15).

Но за да го докоснем повърхностно, можем да кажем, че метод, маркиран с throwsключовата дума, може да хвърля грешки (изключения), което означава екземпляри на Exceptionкласа (и класове, които го наследяват). Ако в клас могат да възникнат няколко различни типа грешки, тогава трябва да изброите всяка от тях, разделени със запетаи."

„Звучи мистериозно и неразбираемо! Ще трябва да изчакам ниво 14.“

основен метод

„Нека сега разгледаме по-отблизо основния метод. Вече разбирате, че редът, в който е деклариран метод, който съдържа всички модификатори, ще повлияе на начина, по който този метод се извиква от други класове и методи. Освен това, той засяга типа на резултатът, който методът ще върне, и показва Howви грешки са възможни, докато се изпълнява.

„Такъв ред се нарича декларация на метод и има следния общ формат:

access modifier static Type name(parameters) throws exceptions
Общ формат на декларация на метод

Където access modifiersсе заменя с public, protected, privateor нищо;

ако методът е статичен, тогава staticсе появява ключовата дума (липсва за нестатичните методи)

Typeе типът на върнатата стойност ( voidако няма резултат)

„Сега разбирате много по-добре Howво означават всички тези думи в декларацията на mainметода:

public static void main(String[] args) throws Exception
Деклариране на mainметода

„Е, сега разбирам, че достъпът до main()метода е възможен от всеки клас, Howто е посочено от publicключовата дума. Методът е статичен, така че може да бъде извикан изрично като Solution.main().“

„Какъв резултат main()връща методът?“

"Изобщо няма! Типът резултат е void. Това е нещо като празен тип, контейнер."

"Какво main()има в скобите?"

"Хм... Оказва се, че mainметодът приема аргументи (!). Те се предават като масив от низове."

„Точно така. И името на параметъра argsподсказва „аргументи“ в умовете ни. Когато програмата стартира, можете да й подадете аргументи — масив от низове. Те ще се съдържат в масива argsв main()метода.“

„Уау! Чудех се на това, когато го видях за първи път, но след това свикнах и започнах да пиша списъка с параметри, без да се замислям.“

„Всички сме бor там. И накрая, необработени грешки като Exception(or негови потомци) могат да възникнат в main()метода. Знаем това благодарение на throws Exceptionчастта от декларацията.“

„Благодаря ти, Риши. Не разбрах всичко, но това беше интересно.“

— Няма за Howво. Сигурен съм, че постепенно ще разбереш всички тези тънки точки.