Java-Modifier类常用方法详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Goodbye_Youth/article/details/83040766

这次主要整理下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
    }
}

猜你喜欢

转载自blog.csdn.net/Goodbye_Youth/article/details/83040766