ПредишенСледващото

Модификатори в Ява - преглед и примери за използване

Здравейте на всички. Днес ние гледаме на модификатори в Java.

Модификатор - език, ключови думи, които могат да се променят по никакъв начин по смисъла на някои от определенията, (например, клас или метод). Сред всички модификатори отделно разпределят модификатори за достъп група:

  • публична;
  • защитени;
  • модификатор по подразбиране - това се нарича пакет;
  • частни.

За модификатори за достъп, ще напиша по-подробно в статията за ООП в Java. И в момента това е най-план:

Модификатори класове (клас модификатори)

Резюмето на модификатор. приложен към класа, каза, че този клас е (или се счита) непълна, и позоваване на "пълен" класа се определя на наследниците. Опит за конкретни примери такъв клас ще доведе до грешка при компилация, като:

Съставяне на този код, ще получите съобщение за грешка: Expression е абстрактно; Аз не може да бъде инстанция.

Забележка от абстрактен клас не е задължително да бъдат абстрактни методи.

Крайният модификатора в класа, каза, че не може да наследи от него.

Опитът да се съставят резултатите кода за грешка: не може да наследи от крайния пример.

Очевидно е, че този клас не може да бъде обявена за двете окончателно и абстрактно.

Вложените класове в Java могат да бъдат обявени за статична. например:

В този случай, класът се нарича статичен вложени клас и има достъп до статични полета и методи за рамкиране клас.

Модификатори методи (метод) модификатори

С методите на опции за малко повече. Методи в Java могат да бъдат обявени за абстрактно, окончателен, статичен, strictfp (виж края на статията), роден, синхронизирани.

Метод абстрактно модификатор може да бъде обявена като метод на елемент (метод член) в рамките на абстрактен клас (или интерфейс). В този случай, тялото на метод отсъства, и могат да бъдат предоставени в изпълнение извлечен клас. Ако методът е обявена като абстрактна в определен клас, имате грешка при компилация.

Методи декларирани с крайния модификатора не могат да бъдат отменени в потомци.

В примера, възникне грешка при компилиране: а () в Clazz.SubClass не може да замени с () в Clazz; подтиснатия метод е окончателно

Методът със статично модификатор принадлежи към класа като цяло, а не на своите случаи, това означава, че не се прехвърля към обекта това. Този метод може да се ползва с помощта на името на класа. Например:

И накрая, синхронизирано модификатора в метода казва, че преди екзекуцията трябва да се въведе предмет монитор (за не-статичен метод) или монитор, свързан с този клас (за статичен метод).

Ето един пример за код, който показва описанието на синхронизирани методи. Заснемане на монитора, както и с помощта на ключовата дума синхронизирани.

Модификатори полета (полеви модификатори)

Нека се обърнем към полетата на класа. Те могат да бъдат описани от такива модификатори като статичен, окончателен, преходно, летливи.

Ако поле клас обявен за статична. След това ще има точно една стойност на това поле, независимо от това как ще се създаде много случаи на класа, дори и да не е създаден един-единствен екземпляр. Тези области се наричат ​​статично ниво променливи на класа (клас променлива).

Невярно е с окончателен модификатор не може да променя стойността си след инициализация. Това важи както за статични и не-статични полета (полета членки на ЕС).

Съставяне на този код, ще причини грешка: не може да се придаде стойност на крайното променлива константа.

За да покаже, че по време на сериализация на обекта за поле, за да бъдат пренебрегнати, използвайте преходно модификатор. Обикновено, такива области, които не са част от вътрешното състояние на обекта или съхраняват междинни стойности.

С летлив модификатор всички малко по-сложно. Опитвам се да обясня по-лесно. В Java нишки могат да съхраняват стойностите на някои променливи в някои техния местен контекст. Ако една нишка се променя стойността на такова поле, а след това друга тема може да не знае за това (тъй като запазва копие). За полета с летлив модификатор е гаранция, че всички теми, винаги ще виждат текущата стойност на променлива.

Модификатори свързани с интерфейси

Интерфейсът може да се приложат същите модификатори като класовете, с изключение, разбира се, окончателно. Интерфейсът е абстрактен по подразбиране. В случай на вложените интерфейс статично дума може да се пропусне - тя е във всички случаи ще бъде статичен.

методи на интерфейса са umlochaniyu са публични абстрактно, така че да ги не се прилагат модификатори окончателен, статичен и роден. Синхронизирани, те също така не може да бъде, защото интерфейсът не може да бъде инстанция.

Полетата подразбиране интерфейс е публичен статичен окончателен, и следователно трябва да се инициализира.

За да обобщим, следните две парчета код са идентични:

Е, по подразбиране - най-новото развитие в областта на модификатори :). метод интерфейс, който е маркиран, като по подразбиране, осигурява изпълнението на метода, по подразбиране. Например:

Този код се компилира без грешки в Java версия 1.8.

Други контексти на употреба модификатори

Има два варианта, в които могат да се използват модификатори.

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

Вторият вариант - това е статична инициализация блок, който се изпълнява, когато класът се зарежда:

И накрая, ние се обръщаме към модификатор strictfp. strictfp модификатор за клас и интерфейс изтъква факта, че всички методи на клас / интерфейс ще strictfp. Но ако методът е описан като strictfp (явно или неявно), а след това на JVM гарантира, че резултатите от изчисление изрази, както и двойно поплавък в рамките на метода ще бъдат същите на всички платформи.

Това модификатор е въведена във версията на Java 1.2. Но сега всички самите съвременни компилатори задал този модификатор, така че относно преносимостта на вашите програми може да бъде спокоен.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!