JavaRush /Blog Java /Random-PL /Modyfikatory, czyli jak rzucać zaklęcia w świecie Java
Petr Gorskin
Poziom 22
Москва

Modyfikatory, czyli jak rzucać zaklęcia w świecie Java

Opublikowano w grupie Random-PL
Dobrego galaktycznego dnia, towarzysze! To mój pierwszy rękopis międzyplanetarny, a ponieważ jestem inżynierem, interpretacji niektórych pojęć można dokonać w języku pozaziemskim.
Modyfikatory, czyli jak rzucać zaklęcia w świecie Java - 1
Wprowadzenie Moim zdaniem Java jest jak niekończący się korytarz z drzwiami (pakietem). Za każdymi z tych drzwi znajduje się wolna przestrzeń oraz szafka na dokumenty, w której przechowywana jest góra magicznych zwojów z instrukcjami (klasami) tworzenia obiektów. Każdy zwój opisuje zestaw cech (zmiennych) i zdolności (metod) - działań (pól) wykonywanych albo na samej klasie, albo na obiekcie złożonym na jej podstawie. Na tym etapie wyobraźmy sobie siebie jako czarodziejów i spróbujmy stworzyć zupełnie nową instrukcję (klasę). Zatem: Modyfikatory, czyli jak rzucać zaklęcia w świecie Java - 2Wypijmy eliksir mądrości (nauczmy się podstaw) i zacznijmy pisać instrukcje. Modyfikatory dostępu i braku dostępu Wyobraźmy sobie, że każda instrukcja i stworzony na jej podstawie przedmiot, a także jego cechy i możliwości, zostaną początkowo zaczarowane magicznie, tj. zostaną im przypisane określone zestawy modyfikatorów. Spróbujmy stworzyć przewodnik po możliwych zaklęciach.
  1. Wymagany jest modyfikator dostępu , który opisuje dostępność klasy, obiektu lub pola: w przypadku jego braku JVM (jest to takie źródło uniwersalnej magii) automatycznie przypisuje pakietowi domyślny identyfikator.

    Począwszy od drugiego modyfikatora istnieją modyfikatory braku dostępu, które nie są obowiązkowe i mogą również ze sobą kolidować (ale przede wszystkim).

  2. Modyfikator Static wskazuje, że klasa, obiekt lub pole jest statyczne. Ale co to oznacza? Zasadniczo spróbujemy tego na polach.

    Zmienne statyczne nazywane są zmiennymi klasowymi i są unikalne dla wszystkich instancji tej klasy. Metody statyczne można wywoływać bez tworzenia obiektu, w którym są zadeklarowane. Klasy statyczne stosuje się przy zagnieżdżaniu jednej klasy w drugiej, a zasada interakcji pomiędzy klasą wewnętrzną i zewnętrzną jest podobna do metod (to temat na osobne omówienie). Może być również używany jako oddzielny blok w obiekcie.

  3. Modyfikator Final skutecznie wskazuje zmiennej, że jest ona stałą. Dla metod - że nie można ich przesłonić podczas dziedziczenia, natomiast dla klas jest to wskazówka, że ​​nie można po nich dziedziczyć (niezmienne).

    Modyfikatory statyczne i końcowe dotyczą klas, obiektów i pól. Istnieją jednak modyfikatory, które dotyczą tylko niektórych z nich (lub nawet ich części, ponieważ zarówno zmienna, jak i metoda są polem, ale nie wszystkie modyfikatory dotyczą obu). Jeśli narysujemy analogię, tylko buty i rękawiczki można zaczarować na prędkość (aby przyspieszyć), ale zaklęcie czapki na prędkość jest bezcelowe (a Uniwersalna Rada Nadzorcza (kompilator) na to nie pozwoli).

  4. Modyfikator Abstrakcyjny ma zastosowanie tylko do metod i klas . Metoda abstrakcyjna to metoda bez implementacji (treści).

    Jeśli klasa jest oznaczona jako abstrakcyjna, zawiera ona metody abstrakcyjne lub ma na celu uniemożliwienie tworzenia instancji tej klasy. Jeśli narysujemy analogię, w środku instrukcji widać nagłówek „Kolorowanie obiektu”, po którym nie ma opisu. Te. korzystając z tej instrukcji możesz stworzyć obiekt, możesz go także pokolorować, ale ta konkretna instrukcja nie mówi jak (napisz własną instrukcję tworzenia czerwonego obiektu na podstawie tego obiektu i opisz, jak go pokolorować).

Podczas pracy w środowisku wielowątkowym można zastosować specjalne modyfikatory:
  1. Modyfikator Synchronized jest używany tylko w przypadku metod. Jego obecność wskazuje, że w danym momencie może go wykonać tylko jeden wątek. Może być również użyty jako oddzielny blok kodu w obiekcie (określając obiekt synchronizacji).

  2. Modyfikator Volatile - tylko dla zmiennych . Zalecane jest stosowanie go w przypadku zmiennych, które mogą być używane jednocześnie przez wiele wątków. Zmienna z takim modyfikatorem jest natychmiast kopiowana z pamięci podręcznej procesora do pamięci głównej przy każdej zmianie, dzięki czemu równoległe wątki mogą otrzymać najnowszą wartość.

    Warto zauważyć, że volatile ma zastosowanie w przypadkach, gdy tylko jeden wątek może pisać do zmiennej, a reszta może tylko z niej czytać. W innych przypadkach lepiej dodać synchronized modyfikator do metod, które zapisują do zmiennej niestabilnej.

  3. Modyfikator przejściowytylko dla zmiennych . Modyfikator ten oznacza zmienne, które należy pominąć przy serializacji obiektu (jest to na tyle sprytny proces, że w zasadzie sam możesz o tym przeczytać...)*

    * - Napisałem ten artykuł na poziomie 17 i do tego czasu nie opisano serializacji jako procesu, więc zamiast kopiować i wklejać, radzę ci przestudiować to samodzielnie, jeśli to konieczne.

Sprzeczne pary modyfikatorów Oprócz możliwości zastosowania modyfikatorów do różnych klas, obiektów i pól, istnieje również koncepcja sprzecznych par. Powiedzmy, że zaczarowanie hełmu siłą powoduje, że jest ciężki, a jednocześnie chcesz go zaczarować, aby był lekki. Jedno do drugiego nie pasuje.
  1. Final i Volatile - jeśli chodzi o zmienną, to nie możemy jednocześnie powiedzieć, że jest ona ostateczna (stała) i że kilka wątków ma możliwość jej zmiany... Przecież jest stała i w każdej chwili wątek może ją odczytać , ale żaden wątek nie jest w stanie zmienić tej stałej (Powszechna Rada Nadzorcza na to nie pozwoli).
  2. Final i Abstrakt - klasy i metody nie mogą być jednocześnie abstrakcyjne (co w większości przypadków implikuje konieczność ich doprecyzowania do wdrożenia) i ostateczne, tj. niezmienny. Okazuje się, że instrukcja mówi, jak stworzyć dobry, trwały hełm z dowolnego materiału (część abstrakcyjna), ale w tym celu nie może być w nim dziur (ostatnia obowiązkowa część nie może zostać zmieniona).
  3. Abstrakcyjna i statyczna — metoda abstrakcyjna nie może być jednocześnie statyczna ani zsynchronizowana. Statyczna metoda abstrakcyjna nie ma sensu, ponieważ nie tylko nic nie robi, ale także należy do całej klasy - wynik jest bezużyteczny.
  4. Abstrakcyjna i synchronizowana – po co synchronizować pracę metodą, która nic nie robi?
Podsumowując , opis modyfikatorów się skończył, wszystkie konflikty zostały wyjaśnione i teraz możesz skonsolidować wynik za pomocą ściągawki - diagramu zaklęć: Modyfikatory, czyli jak rzucać zaklęcia w świecie Javy - 3Podsumowując, chcę powiedzieć, że napisanie tego artykułu było realizacją mojego pragnienia do badania modyfikatorów. To, czy doświadczenie się powiedzie, czy nie, zależy od Ciebie. Czekam na Twoje sugestie dotyczące ulepszenia/poprawienia tego i być może wspólnie zrobimy z tego bardzo przydatny podręcznik dla początkujących graczy Java.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION