1. Модификатори за достъп

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

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

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

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

Достъп от...
Модификатори Всеки клас Детски клас Пакетът му Класата му
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.

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

Защо са необходими модификатори за достъп?

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

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

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



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

Ключовата staticдума прави метод статичен. Ще разгледаме Howво означава това по-късно. Засега просто запомнете няколко факта за статичните методи.

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

ClassName.MethodName()

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

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

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

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

Защо? Ще можете сами да отговорите на този въпрос, когато започнете да изучавате ООП и разберете How работят статичните методи.



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

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

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

Ще разгледаме точното му meaning малко по-късно, когато изучаваме изключенията.

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


4. mainметод

Редът, в който е деклариран метод, който съдържа всички модификатори, ще повлияе на това How този метод се извиква от други класове и методи. Той засяга типа резултат, който методът ще върне, и показва 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не връща ниHowъв резултат. Върнатият тип е void(без тип).

Методът mainприема аргументи(!): масив от низове. И името на параметъра argsпредлага „аргументи“ на умовете ни. Когато програмата стартира, можете да й подадете аргументи - масив от низове. Те ще се съдържат в args масива в main()метода.

Необработени грешки като Exception(or негови наследници) могат да възникнат в main()метода.