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 private
kluczowe przed deklaracją metody, wówczas metodę można wywołać tylko z tej samej klasy, w której została zadeklarowana. Słowo kluczowe public
umoż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. public
modyfikator
Dostęp do metody (lub zmiennej lub klasy) oznaczonej modyfikatorem public
można uzyskać z dowolnego miejsca w programie . To najwyższy stopień otwartości — nie ma żadnych ograniczeń.
2. private
modyfikator
Dostęp do metody (lub zmiennej lub klasy) oznaczonej modyfikatorem private
moż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. protected
modyfikator
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 public
na 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."
static
sł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ć Solution
przed 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 main
metody 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.
throws
słowo kluczowe
„Jest jeszcze jedno słowo kluczowe, które prawdopodobnie widziałeś w deklaracji metody — słowo throws
kluczowe. W przeciwieństwie do modyfikatorów dostępu i static
sł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 throws
moż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
Gdzie access modifiers
jest zastępowane przez public
, protected
, private
lub wcale;
jeśli metoda jest statyczna, static
pojawia się słowo kluczowe (nie występuje w przypadku metod niestatycznych)
Type
jest typem zwracanej wartości ( void
jeś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
„Cóż, teraz zdałem sobie sprawę, że dostęp do main()
metody jest możliwy z dowolnej klasy, na co wskazuje słowo public
kluczowe. 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 main
metoda przyjmuje argumenty (!). Są one przekazywane jako tablica łańcuchów."
„Zgadza się. A nazwa parametru args
sugeruje nam „argumenty”. Kiedy program się uruchamia, możesz przekazać mu argumenty — tablicę łańcuchów. Będą one zawarte w tablicy args
w 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 Exception
w main()
metodzie mogą wystąpić nieobsługiwane błędy, takie jak (lub ich potomkowie). Wiemy o tym dzięki throws Exception
częś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”.
GO TO FULL VERSION