Fragment wykładu z mentorem w ramach kursu Codegym University. Zapisz się na pełny kurs.


"Witaj, Amigo! Słyszałem, że masz już dobre rozeznanie w metodach?"

„Cześć, Rishi. Tak, poradziłem sobie już z sztuczką tego nauczyciela. Powiedziałbym, że nie było tak źle, ale powiesz mi:„ Nie, nie! Niczego nie wymyśliłeś. '"

- Najwyraźniej spędzasz zbyt dużo czasu na pogawędkach z niektórymi nauczycielami, prawdopodobnie z Diego. W każdym razie... wciąż mam nadzieję, że rozumiesz metody wystarczająco dobrze. W końcu dzisiaj nauczę cię kilku magicznych słów, które pomogą określić metody „strefy wpływów”.

„Brzmi intrygująco”.

„W rzeczywistości wszystko jest proste. Przed każdą metodą programiści mogą określić tak zwane modyfikatory dostępu. Są to między innymi następujące słowa kluczowe: public, protected, private.

„Te modyfikatory dostępu pozwalają ograniczyć dostęp innych klas do metody.

„Na przykład, jeśli napiszesz słowo privatekluczowe przed deklaracją metody, wówczas metodę można wywołać tylko z tej samej klasy, w której została zadeklarowana. Słowo kluczowe publicumożliwia dostęp do oznaczonej metody z dowolnej metody dowolnej klasy.

W sumie są 3 takie modyfikatory, ale istnieją 4 rodzaje dostępu do metody. Dzieje się tak, ponieważ brak modyfikatora dostępu również coś oznacza. Oto pełna tabela:

Dojazd z...
Modyfikatory Dowolna klasa Klasa dziecięca Jego pakiet Jego klasa
public Tak Tak Tak Tak
protected NIE Tak Tak Tak
bez modyfikatora NIE NIE Tak Tak
private NIE NIE NIE Tak

„A oto pełne wyjaśnienie modyfikatorów dostępu:

1. publicmodyfikator

Dostęp do metody (lub zmiennej lub klasy) oznaczonej modyfikatorem publicmożna uzyskać z dowolnego miejsca w programie . To najwyższy stopień otwartości — nie ma żadnych ograniczeń.

2. privatemodyfikator

Dostęp do metody (lub zmiennej lub klasy) oznaczonej modyfikatorem privatemożna uzyskać tylko z tej samej klasy, w której została zadeklarowana . Dla wszystkich innych klas zaznaczona metoda (lub zmienna) jest niewidoczna. To tak, jakby nie istniało. To najwyższy poziom ograniczeń — tylko własna klasa.

3. Brak modyfikatora (modyfikator domyślny)

Jeśli metoda (lub zmienna) nie jest oznaczona żadnym modyfikatorem, to uważa się, że ma „domyślny modyfikator”. Zmienne lub metody z tym modyfikatorem (tzn. bez żadnego modyfikatora) są widoczne dla wszystkich klas w pakiecie, w którym zostały zadeklarowane . I tylko do nich. Ten modyfikator jest czasami nazywany package-private, co sugeruje, że dostęp do zmiennych i metod jest otwarty dla całego pakietu, w którym znajduje się ich klasa.

4. protectedmodyfikator

Jeśli metoda jest oznaczona modyfikatorem protected, to można uzyskać do niej dostęp z tej samej klasy, tego samego pakietu i potomków (klas, które dziedziczą klasę, w której metoda jest zadeklarowana). Przeanalizujemy ten temat bardziej szczegółowo w zadaniu Java Core.”

„Interesujące, ale nie jestem pewien, czy mogę od razu umieścić te modyfikatory we wszystkich właściwych miejscach.

„Dojdziesz do tego stopniowo. Nie musisz się martwić z wyprzedzeniem. Dopóki nie dotrzesz do końca zadania Java Składnia, możesz używać modyfikatora publicna wszystkich swoich metodach (a także klasach i zmiennych instancji). Będziesz potrzebować inne modyfikatory, gdy zaczynamy aktywnie uczyć się OOP."

„Czy możesz wyjaśnić bardziej szczegółowo, dlaczego potrzebne są modyfikatory dostępu?”

„Stają się niezbędne przy dużych projektach napisanych jednocześnie przez dziesiątki i setki programistów.

„Czasami zdarzają się sytuacje, gdy programista chce podzielić zbyt dużą metodę na części i przenieść część kodu do metod pomocniczych. Ale jednocześnie nie chce, aby inni programiści wywoływali te metody pomocnicze, ponieważ odpowiedni kod może nie działać poprawnie."

„Więc wymyślili te modyfikatory dostępu. Jeśli oznaczysz metodę pomocniczą słowem private , to żaden kod inny niż twoja klasa nie będzie mógł zobaczyć twojej metody pomocniczej”.

"Myślę, że rozumiem."

staticsłowo kluczowe

„Istnieje jeszcze jedno interesujące słowo kluczowe. Jest nim static. Nic dziwnego, że powoduje, że metody stają się statyczne”.

"Co to znaczy?"

„Opowiem ci o tym później. Nie martw się. Na razie spróbuj zapamiętać kilka faktów na temat metod statycznych.

Fakt 1. Metoda statyczna nie jest dołączona do żadnego obiektu, lecz należy do klasy, w której została zadeklarowana. Aby wywołać metodę statyczną, należy napisać:

ClassName.MethodName()

Przykłady metod statycznych:

Nazwa klasy Nazwa metody statycznej
Thread.sleep() Thread sleep()
Math.abs() Math abs()
Arrays.sort() Arrays sort()

Nazwę klasy przed nazwą metody statycznej można pominąć, jeśli metoda statyczna jest wywoływana z poziomu jej klasy. Dlatego nie trzeba pisać Solutionprzed nazwami każdej z wywoływanych metod statycznych.

Fakt 2. Metoda statyczna nie może uzyskać dostępu do niestatycznych metod własnej klasy. Metoda statyczna może uzyskiwać dostęp tylko do metod statycznych. W rezultacie deklarujemy wszystkie metody, które chcemy wywołać z mainmetody static."

"Dlaczego?"

„Sam sobie odpowiesz na to pytanie, kiedy zaczniesz uczyć się OOP i zrozumiesz, jak działają metody statyczne. Do tego czasu po prostu mi zaufaj.

throwssłowo kluczowe

„Jest jeszcze jedno słowo kluczowe, które prawdopodobnie widziałeś w deklaracji metody — słowo throwskluczowe. W przeciwieństwie do modyfikatorów dostępu i staticsłowa kluczowego, to słowo kluczowe jest umieszczane po parametrach metody:

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

"I co to znaczy?"

„Jeszcze raz muszę ci powiedzieć, że poznasz jego prawdziwy cel później, kiedy będziemy studiować wyjątki (na poziomie 15).

Ale dotykając tego powierzchownie, możemy powiedzieć, że metoda oznaczona słowem kluczowym throwsmoże rzucać błędy (wyjątki), czyli instancje klasy Exception(i klasy, które ją dziedziczą). Jeśli w klasie może wystąpić kilka różnych rodzajów błędów, musisz wymienić każdy z nich, oddzielając je przecinkami”.

„Brzmi tajemniczo i niezrozumiale! Będę musiał poczekać na poziom 14.”

główna metoda

„Przyjrzyjmy się teraz bliżej metodzie main. Wiesz już, że linia, w której zadeklarowana jest metoda, zawierająca wszystkie modyfikatory, wpłynie na sposób wywołania tej metody z innych klas i metod. Dodatkowo wpływa na typ result metoda zwróci i wskaże, jakie błędy są możliwe podczas jej działania.

„Taka linia nazywana jest deklaracją metody i ma następujący ogólny format:

access modifier static Type name(parameters) throws exceptions
Ogólny format deklaracji metody

Gdzie access modifiersjest zastępowane przez public, protected, privatelub wcale;

jeśli metoda jest statyczna, staticpojawia się słowo kluczowe (nie występuje w przypadku metod niestatycznych)

Typejest typem zwracanej wartości ( voidjeśli nie ma wyniku)

„Teraz znacznie lepiej rozumiesz, co oznaczają te wszystkie słowa w deklaracji metody main:

public static void main(String[] args) throws Exception
Deklaracja mainmetody

„Cóż, teraz zdałem sobie sprawę, że dostęp do main()metody jest możliwy z dowolnej klasy, na co wskazuje słowo publickluczowe. Metoda jest statyczna, więc można ją jawnie nazwać jako Solution.main()”.

„Jaki wynik main()zwraca metoda?”

„Żaden! Typ wyniku to void. To trochę jak pusty typ, symbol zastępczy”.

„Co main()ma w nawiasach?”

"Hmm... Okazuje się, że mainmetoda przyjmuje argumenty (!). Są one przekazywane jako tablica łańcuchów."

„Zgadza się. A nazwa parametru argssugeruje nam „argumenty”. Kiedy program się uruchamia, możesz przekazać mu argumenty — tablicę łańcuchów. Będą one zawarte w tablicy argsw main()metodzie”.

„Wow! Zastanawiałem się nad tym, kiedy zobaczyłem to po raz pierwszy, ale potem przyzwyczaiłem się i bez zastanowienia zacząłem pisać listę parametrów”.

„Wszyscy tam byliśmy. W końcu Exceptionw main()metodzie mogą wystąpić nieobsługiwane błędy, takie jak (lub ich potomkowie). Wiemy o tym dzięki throws Exceptionczęści deklaracji”.

„Dziękuję, Rishi. Nie wszystko zrozumiałem, ale to było interesujące”.

„Nie ma za co. Jestem pewien, że stopniowo zrozumiesz wszystkie te subtelne kwestie”.