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

Последнее обновление: 29.09.2025

Классы Field (поле класса), Method (метод класса) и Constructor (конструктор класса) имеют метод getModifiers(), который возвращает целое число с различными включенными и выключенными битами, которые описывают используемые модификаторы, такие как public и static. Затем можно использовать статические методы класса Modifier для анализа целого числа, возвращаемого getModifiers():

  • boolean isAbstract(int mod): возвращает true, если параметр mod содержит модификатор abstract

  • boolean isFinal(int mod): возвращает true, если параметр mod содержит модификатор final

  • boolean isInterface(int mod): возвращает true, если параметр mod содержит модификатор interface

  • boolean isNative(int mod): возвращает true, если параметр mod содержит модификатор native

  • boolean isPrivate(int mod): возвращает true, если параметр mod содержит модификатор private

  • boolean isProtected(int mod): возвращает true, если параметр mod содержит модификатор protected

  • boolean isPublic(int mod): возвращает true, если параметр mod содержит модификатор public

  • boolean isStatic(int mod): возвращает true, если параметр mod содержит модификатор static

  • boolean isSynchronized(int mod): возвращает true, если параметр mod содержит модификатор synchronized

  • boolean isTransient(int mod): возвращает true, если параметр mod содержит модификатор transient

  • boolean isVolatile(int mod): возвращает true, если параметр mod содержит модификатор volatile

Исследуем модификаторы полей:

import java.lang.reflect.*;

public class Program{
      
    public static void main(String[] args) {
        
        Class cl = Person.class;

        // получаем все поля типа Person
        Field[] fields = cl.getDeclaredFields();

        // выводим информацию о полях
        for(Field f : fields){
            // получаем модификаторы
            int mod = f.getModifiers();
            if(Modifier.isPublic(mod)){
                System.out.print("public ");
            }
            else if(Modifier.isProtected(mod)){
                System.out.print("protected ");
            }
            else if(Modifier.isPrivate(mod)){
                System.out.print("private ");
            }
            if(Modifier.isStatic(mod)){
                System.out.print("static ");
            }

            // получаем тип 
            String type = f.getType().getName();
            System.out.print(type + " ");
            // получаем имя
            String name = f.getName();
            System.out.println(name + ";");
        }
    }
}
class Person {
     
    public String name;
    private int id;
    private static int count;

    Person(String name){  
        this.name = name; 
        this.id = ++count;
    }
    
    void print(){
        System.out.printf("Person. Id: %d  Name: %s  \n", id,  name);
    }
} 

В данном случае получаем все поля класса Person. Затем в цикле переьираем каждое поле, получаем его модификаторы и смотрим, представляют они public, protected. private или static:

for(Field f : fields){
    // получаем модификаторы
    int mod = f.getModifiers();
    if(Modifier.isPublic(mod)){
        System.out.print("public ");
    }
    else if(Modifier.isProtected(mod)){
        System.out.print("protected ");
    }
    else if(Modifier.isPrivate(mod)){
        System.out.print("private ");
    }
    if(Modifier.isStatic(mod)){
        System.out.print("static ");
    }

Затем получаем тип и имя поля и выводим на консоль. В итоге мы получим следующий консольный вывод:

public java.lang.String name;
private int id;
private static int count;

Для вывода модификаторов можно использовать метод Modifier.toString(). Например:

import java.lang.reflect.*;

public class Program{
      
    public static void main(String[] args) {
        
        Class cl = Person.class;

        // получаем все поля типа Person
        Field[] fields = cl.getDeclaredFields();

        // выводим информацию о полях
        for(Field f : fields){
            // получаем модификаторы
            String modifiers = Modifier.toString(f.getModifiers());
             // получаем тип 
            String type = f.getType().getName();
            // получаем имя
            String name = f.getName();

            System.out.printf("%s %s %s;\n", modifiers, type, name);
        }
    }
}
class Person {
     
    public String name;
    private int id;
    private static int count;

    Person(String name){  
        this.name = name; 
        this.id = ++count;
    }
    
    void print(){
        System.out.printf("Person. Id: %d  Name: %s  \n", id,  name);
    }
} 

Для получения модификаторов в виде строки передаем целочисленный код модификаторов в метод Modifier.toString()

String modifiers = Modifier.toString(f.getModifiers());
Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850
Morty Proxy This is a proxified and sanitized view of the page, visit original site.