Class -- 07 -- Modifier类常用方法解析

原文链接:Class – 07 – Modifier类常用方法解析


相关文章:

  • Class – 01 – System类常用方法解析

  • Class – 02 – Arrays类常用方法解析

  • Class – 03 – Random类常用方法详解析

  • Class – 04 – Date类常用方法解析

  • Class – 05 – TimeUnit类常用方法解析

  • Class – 06 – TimeZone类常用方法详解析

  • Class – 07 – Modifier类常用方法解析

  • Class – 08 – Parameter类常用方法解析

  • Class – 09 – Field类常用方法解析

  • Class – 10 – Method类常用方法解析

  • Class – 11 – Math类常用方法解析

  • Class – 12 – Locale类常用方法解析

  • Class – 13 – ThreadPoolExecutor类常用方法解析


这次主要整理下 Java 中 Modifier 类的常用方法


一、Modifier 类的定义

  • Modifier 类 (修饰符工具类) 位于 java.lang.reflect 包中,用于判断和获取某个类、变量或方法的修饰符

  • Modifier 类将各个修饰符表示为相对应的整数,在源码中用 16 进制进行表示

    修饰符 静态常量 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 类常用方法

  • 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
      
    • 源码如下

      Class -- 07 -- Modifier类常用方法解析_第1张图片


  • Modifier.constructorModifiers()

    • 返回可用于修饰构造方法的修饰符所代表的整数

    • 构造方法修饰符:public、protected、private

      System.out.println(Modifier.constructorModifiers()); // 7
      // public protected private
      System.out.println(Modifier.toString(Modifier.constructorModifiers()));
      

  • 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()));
      

  • 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()));
      

  • 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()));
      

  • 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()));
      

  • Modifier.parameterModifiers()

    • 返回可用于修饰参数的修饰符所代表的整数

    • 参数修饰符:final

      System.out.println(Modifier.parameterModifiers()); // 16
      System.out.println(Modifier.toString(Modifier.parameterModifiers())); // final
      

  • Modifier.isPublic(int mod)

    • 判断整数参数是否包括 public 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isPrivate(int mod)

    • 判断整数参数是否包括 private 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isProtected(int mod)

    • 判断整数参数是否包括 protected 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isStatic(int mod)

    • 判断整数参数是否包括 static 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isFinal(int mod)

    • 判断整数参数是否包括 finale 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isSynchronized(int mod)

    • 判断整数参数是否包括 synchronized 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isVolatile(int mod)

    • 判断整数参数是否包括 volatile 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isTransient(int mod)

    • 判断整数参数是否包括 transient 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isNative(int mod)

    • 判断整数参数是否包括 native 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isInterface(int mod)

    • 判断整数参数是否包括 interface 修饰符,如果包含则返回 true,否则返回 false

  • Modifier.isAbstract(int mod)

    • 判断整数参数是否包括 abstract 修饰符,如果包含则返回 true,否则返回 false

  • 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
    }
}

你可能感兴趣的:(Class)