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

本文深入解析了Java中Modifier类的用途及其实现细节,详细介绍了各类修饰符的16进制表示及其对应的判断方法,包括public、private、protected等,并提供了实例代码帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


相关文章:


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


一、Modifier 类的定义

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

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

    修饰符静态常量16 进制表示
    publicModifier.PUBLIC0x00000001 (1)
    privateModifier.PRIVATE0x00000002 (2)
    protectedModifier.PROTECTED0x00000004 (4)
    staticModifier.STATIC0x00000008 (8)
    finalModifier.FINAL0x00000010 (16)
    synchronizedModifier.SYNCHRONIZED0x00000020 (32)
    volatileModifier.VOLATILE0x00000040 (64)
    transientModifier.TRANSIENT0x00000080 (128)
    nativeModifier.NATIVE0x00000100 (256)
    interfaceModifier.INTERFACE0x00000200 (512)
    abstractModifier.ABSTRACT0x00000400 (1024)
    strictModifier.STRICT0x00000800 (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
      
    • 源码如下

      image


  • 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
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值