При изучении основ Java модификаторы являются одной из самых важных частей Java. Мы используем их везде. Так что лучше иметь хорошее представление об этих вещах. В этом посте обсуждаются модификаторы Java (доступ и отсутствие доступа).

Модификаторы

В Java есть два типа модификаторов. Модификаторы — это ключевые слова, которые можно использовать для определения полей.

Модификаторы доступа

В Java есть четыре модификатора доступа. Публичный, защищенный, стандартный и частный. Эти ключевые слова указывают на возможности доступа каждого поля, такого как класс, метод, переменная или конструктор.

В приведенной выше таблице все очень четко описано. Давайте посмотрим на это более четко, используя несколько примеров.

Личное

Когда модификатор доступа является закрытым, к нему можно получить доступ только из того же класса. К нему не могут получить доступ другие элементы в том же пакете, другом пакете или из элемента в подклассе. Вот пример.

public class Hello{ 
     private Hello(){} //private constructor 
     private String name; //private variable 
     public int age; 
     public String getName(){ 
         return name; 
     } 
    private void sayHello(){
         ...
    } //private method 
    public getInstance(){ 
         Hello hello = new Hello(); 
         return hello; 
    } 
}

В приведенном выше примере есть две переменные: частная и общедоступная. Доступ к имени частной переменной возможен только из того же класса. Если мы попытаемся вызвать имя переменной откуда-то еще, она не сможет вызвать. То же самое относится и к частному методу. Доступ к нему возможен только из того же класса.

Помимо частной переменной и метода, есть еще один частный конструктор. Конструктор pivate полезен, когда мы хотим ограничить создание объектов класса из другого места. Когда у нас есть закрытый конструктор, мы не можем создавать экземпляры этого класса вне класса. В таких ситуациях мы можем получить экземпляр только из метода, подобного методу getInstance, который указан в приведенном выше коде.

По умолчанию (без модификатора)

Мы можем создавать методы, классы, переменные без модификаторов доступа. Мы называем такие ситуации модификатором по умолчанию. Когда модификаторов нет, к этому элементу может получить доступ любой член в том же пакете. К ним не могут получить доступ элементы в разных пакетах.

Защищено

package packageA; 
public class ClassA{ 
     protected void prtotectedMethod(){
         ...
     } 
} 
package packageB; 
public class ClassB extends classA{ 
     ClassB b = new ClassB(); 
     b.protectedMethod(); 
}

Доступ к защищенным элементам возможен только для элементов в одном пакете или элементов в разных пакетах, которые используют наследование с защищенным элементом, содержащим класс. (здесь мы можем получить доступ к защищенному методу в другом пакете, потому что ClassA наследует ClassB)

Общедоступно

Публичные элементы доступны из любого места. К нему могут обращаться элементы внутри класса, внутри пакета, а также внутри другого пакета.

На этих примерах мы можем ясно понять приведенный выше график.

Модификаторы без доступа

Статическая, Финальная, Абстрактная, Синхронизированная

Статический

Статическое ключевое слово используется для переменных и методов. Когда мы используем ключевое слово static для переменных, а также для методов.

может получить доступ без создания объекта

Статические переменные

Статические переменные создаются только один раз, и независимо от того, сколько экземпляров класса создано, будет создан только один экземпляр статической переменной. Эти статические переменные используются для представления общего свойства класса.

public class StatClass{ 
   public static String statVar = "This is a static variable"; //static variable 
   public static void staticMethod(){
      ...
   } //static method 
} 
class NewClass{ 
   static{ //static block 
       staticName = "Hello"; 
   } 
   public void testMethod(){ 
       System.out.println(StatClass.statVar);
       StatClass.staticMethod(); 
   } 
}

Как и в приведенном выше примере, мы можем вызывать статические переменные из другого места, просто используя имя класса, не создавая новый экземпляр класса.

Статические методы

Наиболее распространенным примером статического метода является основной метод, который мы используем в каждом простом Java-приложении, которое мы создаем. Как и в случае со статическими переменными, статические методы также можно вызывать без создания объекта этого класса. Это также показано в примере.

Статический блок

Статический блок — это еще одно место, где мы размещаем статическое ключевое слово. Мы размещаем статические члены в статическом блоке. Он выполняется перед методом main().

Окончательный

Когда переменная или метод становятся окончательными, мы не можем изменить значение этой переменной и не можем снова изменить метод. Если мы объявим ссылочную переменную как конечную переменную, ссылка не может быть изменена, но состояние может быть изменено. Например

final Hello hello = new Hello();

ссылка на hello не может быть изменена. Но мы можем изменить состояние объекта Hello, изменив значения его переменных. Когда класс объявляется окончательным, никакой другой класс не может его наследовать.

Аннотация

Абстрактные методы не имеют тела метода. Пример абстрактного метода:

public abstract abstractMethod();

Если у нас есть хотя бы один абстрактный метод в классе, то класс также должен быть определен как абстрактный класс. Абстрактные классы не могут быть инициализированы. А также, если мы расширяем класс, который содержит абстрактные методы, то эти абстрактные методы должны быть переопределены в этом первом конкретном классе, который он встречает.

Синхронизировано

Это используется, когда у нас есть несколько потоков, одновременно обращающихся к одному и тому же блоку. Чтобы избежать этого, мы можем сделать его синхронизированным, чтобы только один поток мог изменять его одновременно.

Временный

При сериализации объекты, объявленные как переходные, пропускаются.

public transient int a; //this will persist the value of a public int b; //this will not persist the value of b

изменчивый

Когда объект объявлен как volatile, его значение локальной копии всегда объединяется с главной копией памяти.

Я думаю, что мы уже поговорили о модификаторах доступа и запрета доступа. Надеюсь, вы все ясно понимаете, что здесь находится. 🙂

Первоначально опубликовано на сайте heshanicse.wordpress.com 3 мая 2017 г.