1. 程式人生 > >Java-Modifier類常用方法詳解

Java-Modifier類常用方法詳解

這次主要整理下Java中Modifier類的常用方法

一、Modifier類的定義

  • Modifier類 (修飾符工具類) 位於 java.lang.reflect 包中,用於判斷和獲取某個類、變數或方法的修飾符
  • Modifier類將各個修飾符表示為相對應的整數,在原始碼中用16進位制進行表示
  • 靜態常量
    • public:Modifier.PUBLIC (0x00000001) (1)
    • private:Modifier.PRIVATE (0x00000002) (2)
    • protected:Modifier.PROTECTED (0x00000004) (4)
    • static:Modifier.STATIC (0x00000008) (8)
    • final:Modifier.FINAL (0x00000010) (16)
    • synchronized:Modifier.SYNCHRONIZED(0x00000020) (32)
    • volatile:Modifier.VOLATILE(0x00000040) (64)
    • transient:Modifier.TRANSIENT(0x00000080) (128)
    • native:Modifier.NATIVE(0x00000100) (256)
    • interface:Modifier.INTERFACE(0x00000200) (512)
    • abstract:Modifier.ABSTRACT(0x00000400) (1024)
    • strict:Modifier.STRICT(0x00000800) (2048)

二、Modifier類的常用方法

  1、Modifier.toString(int mod)

  • 返回一個字串,該字串表示該整數引數所代表的修飾符
  • 通過 & 運算,來確定所代表的修飾符 例如:7的二進位制表示為111 & 上 Modifier.PUBLIC 的值 (0x00000001) 不為0,則說明有public修飾符 & 上 Modifier.PRIVATE 的值 (0x00000002) 不為0,則說明有private修飾符 & 上 Modifier.PROTECTED 的值 (0x00000004) 不為0,則說明有protected修飾符
System.out.println(Modifier.toString(1)); // public
System.out.println(Modifier.
toString(3)); // public private System.out.println(Modifier.toString(7)); // public private protected
  • 原始碼如下 在這裡插入圖片描述

  2、Modifier.constructorModifiers()

  • 返回可用於修飾構造方法的修飾符所代表的整數
  • 構造方法修飾符:public、protected、private
System.out.println(Modifier.constructorModifiers()); // 7
// public protected private
System.out.println(Modifier.toString(Modifier.constructorModifiers()));

  3、Modifier.classModifiers()

  • 返回可用於修飾類的修飾符所代表的整數
  • 類修飾符:public、protected、private、abstract、static、final、strictfp
System.out.println(Modifier.classModifiers()); // 3103
// public protected private abstract static final strictfp
System.out.println(Modifier.toString(Modifier.classModifiers()));

  4、Modifier.fieldModifiers()

  • 返回可用於修飾欄位的修飾符所代表的整數
  • 欄位修飾符:public、protected、private、static、final、transient、volatile
System.out.println(Modifier.fieldModifiers()); // 223
// public protected private static final transient volatile
System.out.println(Modifier.toString(Modifier.fieldModifiers()));

  5、Modifier.interfaceModifiers()

  • 返回可用於修飾介面的修飾符所代表的整數
  • 介面修飾符:public、protected、private、abstract、static、strictfp
System.out.println(Modifier.interfaceModifiers()); // 3087
// public protected private abstract static strictfp
System.out.println(Modifier.toString(Modifier.interfaceModifiers()));

  6、Modifier.methodModifiers()

  • 返回可用於修飾方法的修飾符所代表的整數
  • 方法修飾符:public、protected、private、abstract、static、final、synchronized、native、strictfp
System.out.println(Modifier.methodModifiers()); // 3391
// public protected private abstract static final synchronized native strictfp
System.out.println(Modifier.toString(Modifier.methodModifiers()));

  7、Modifier.parameterModifiers()

  • 返回可用於修飾引數源語言的修飾符所代表的整數
  • 引數源語言修飾符:final
System.out.println(Modifier.parameterModifiers()); // 16
System.out.println(Modifier.toString(Modifier.parameterModifiers())); // final

  8、Modifier.isPublic(int mod)

  • 判斷整數引數是否包括 public 修飾符,如果包含則返回true,否則返回false

  9、Modifier.isPrivate(int mod)

  • 判斷整數引數是否包括 private 修飾符,如果包含則返回true,否則返回false

  10、Modifier.isProtected(int mod)

  • 判斷整數引數是否包括 protected 修飾符,如果包含則返回true,否則返回false

  11、Modifier.isStatic(int mod)

  • 判斷整數引數是否包括 static 修飾符,如果包含則返回true,否則返回false

  12、Modifier.isFinal(int mod)

  • 判斷整數引數是否包括 finale 修飾符,如果包含則返回true,否則返回false

  13、Modifier.isSynchronized(int mod)

  • 判斷整數引數是否包括 synchronized 修飾符,如果包含則返回true,否則返回false

  14、Modifier.isVolatile(int mod)

  • 判斷整數引數是否包括 volatile 修飾符,如果包含則返回true,否則返回false

  15、Modifier.isTransient(int mod)

  • 判斷整數引數是否包括 transient 修飾符,如果包含則返回true,否則返回false

  16、Modifier.isNative(int mod)

  • 判斷整數引數是否包括 native 修飾符,如果包含則返回true,否則返回false

  17、Modifier.isInterface(int mod)

  • 判斷整數引數是否包括 interface 修飾符,如果包含則返回true,否則返回false

  18、Modifier.isAbstract(int mod)

  • 判斷整數引數是否包括 abstract 修飾符,如果包含則返回true,否則返回false

  19、Modifier.isStrict(int mod)

  • 判斷整數引數是否包括 strict 修飾符,如果包含則返回true,否則返回false
public class ModifierTest {

    public static final String data = "123";
    
    public static void main(String[] args) throws Exception {
        int modifiers = ModifierTest.class.getDeclaredField("data").getModifiers();
        System.out.println(Modifier.isPublic(modifiers)); // true
        System.out.println(Modifier.isPrivate(modifiers)); // false
        System.out.println(Modifier.isProtected(modifiers)); // false
        System.out.println(Modifier.isStatic(modifiers)); // true
        System.out.println(Modifier.isFinal(modifiers)); // true
        System.out.println(Modifier.isSynchronized(modifiers)); // false
        System.out.println(Modifier.isVolatile(modifiers)); // false
        System.out.println(Modifier.isTransient(modifiers)); // false
        System.out.println(Modifier.isNative(modifiers)); // false
        System.out.println(Modifier.isInterface(modifiers)); // false
        System.out.println(Modifier.isAbstract(modifiers)); // false
        System.out.println(Modifier.isStrict(modifiers)); // false
    }
}