Фрагмент от лекция с ментор като част от курса на 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
, private
or нищо;
ако методът е статичен, тогава static
се появява ключовата дума (липсва за нестатичните методи)
Type
е типът на върнатата стойност ( void
ако няма резултат)
„Сега разбирате много по-добре Howво означават всички тези думи в декларацията на main
метода:
public static void main(String[] args) throws Exception
„Е, сега разбирам, че достъпът до main()
метода е възможен от всеки клас, Howто е посочено от public
ключовата дума. Методът е статичен, така че може да бъде извикан изрично като Solution.main()
.“
„Какъв резултат main()
връща методът?“
"Изобщо няма! Типът резултат е void
. Това е нещо като празен тип, контейнер."
"Какво main()
има в скобите?"
"Хм... Оказва се, че main
методът приема аргументи (!). Те се предават като масив от низове."
„Точно така. И името на параметъра args
подсказва „аргументи“ в умовете ни. Когато програмата стартира, можете да й подадете аргументи — масив от низове. Те ще се съдържат в масива args
в main()
метода.“
„Уау! Чудех се на това, когато го видях за първи път, но след това свикнах и започнах да пиша списъка с параметри, без да се замислям.“
„Всички сме бor там. И накрая, необработени грешки като Exception
(or негови потомци) могат да възникнат в main()
метода. Знаем това благодарение на throws Exception
частта от декларацията.“
„Благодаря ти, Риши. Не разбрах всичко, но това беше интересно.“
— Няма за Howво. Сигурен съм, че постепенно ще разбереш всички тези тънки точки.
GO TO FULL VERSION