博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java类的修饰符判断:java.lang.reflect.Modifier
阅读量:5906 次
发布时间:2019-06-19

本文共 2146 字,大约阅读时间需要 7 分钟。

hot3.png

在查看Java.lang.reflect 包的源码的时候,发现了Modifier。

先将一些类方法列举出来。

static boolean isAbstract(int mod)
          如果整数参数包括 abstract 修饰符,则返回 true,否则返回 false。
static boolean isFinal(int mod)
          如果整数参数包括 final 修饰符,则返回 true,否则返回 false。
static boolean isInterface(int mod)
          如果整数参数包括 interface 修饰符,则返回 true,否则返回 false。
static boolean isNative(int mod)
          如果整数参数包括 native 修饰符,则返回 true,否则返回 false。
static boolean isPrivate(int mod)
          如果整数参数包括 private 修饰符,则返回 true,否则返回 false。
static boolean isProtected(int mod)
          如果整数参数包括 protected 修饰符,则返回 true,否则返回 false。
static boolean isPublic(int mod)
          如果整数参数包括 public 修饰符,则返回 true,否则返回 false。
static boolean isStatic(int mod)
          如果整数参数包括 static 修饰符,则返回 true,否则返回 false。
static boolean isStrict(int mod)
          如果整数参数包括 strictfp 修饰符,则返回 true,否则返回 false。
static boolean isSynchronized(int mod)
          如果整数参数包括 synchronized 修饰符,则返回 true,否则返回 false。
static boolean isTransient(int mod)
          如果整数参数包括 transient 修饰符,则返回 true,否则返回 false。
static boolean isVolatile(int mod)
          如果整数参数包括 volatile 修饰符,则返回 true,否则返回 false。

参考JDK API 1.6.0中文版。

我们选 public static boolean isPublic(int mod) 这个方法来分析:

    public static boolean isPublic(int mod) {

        return (mod & PUBLIC) != 0;

    }

PUBLIC的值为  public static final int PUBLIC           = 0x00000001;

并且查看其他的方法的代码可以发现,大部分都是直接与int数值进行与操作的。

我们看看这个isPublic这个方法在哪里有用到,并且是如何对比值得。

1,在sun.reflect.FieldInfo,防范isPublic

public boolean isPublic() {

        return (Modifier.isPublic(modifiers()));

 }

public int modifiers() {

        return modifiers;

    }

此方法是通过FieldInfo对象本身的modifiers来判断是否是Public的。

2,在sun.reflect.misc.MethodUtil.getInternalPublicMethods(Class, Map),

发现有 Modifier.isPublic(cls.getModifiers()),

然后发现:

public native int java.lang.Class.getModifiers();

即,Class类的modifier是有native 方法返回的。

查看JDK文档:

  • 返回此类或接口以整数编码的 Java 语言修饰符。修饰符由 Java 虚拟机的 publicprotectedprivatefinalstaticabstractinterface 对应的常量组成;它们应当使用 Modifier 类的方法来解码。

    如果底层类是数组类,则其 publicprivateprotected 修饰符与其组件类型的修饰符相同。如果此 Class 表示一个基本类型或 void,则其 public 修饰符始终为 trueprotectedprivate 修饰符始终为 false。如果此对象表示一个数组类、一个基本类型或 void,则其 final 修饰符始终为 true,其接口修饰符始终为 false。该规范没有给定其他修饰符的值。

    Java Virtual Machine Specification 中的表 4.1 对修饰符编码进行了详细说明。  

即,modifier是由Java虚拟机根据修饰符返回的常量。

转载于:https://my.oschina.net/u/214483/blog/200568

你可能感兴趣的文章
asp.net开源CMS推荐
查看>>
csharp skype send message in winform
查看>>
MMORPG 游戏服务器端设计--转载
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
ubuntu下安装libxml2
查看>>
nginx_lua_waf安装测试
查看>>
WinForm窗体缩放动画
查看>>
JQuery入门(2)
查看>>
linux文件描述符
查看>>
传值引用和调用引用的区别
查看>>
hyper-v 无线网连接
查看>>
Python3.7.1学习(六)RabbitMQ在Windows环境下的安装
查看>>
Windows下memcached的安装配置
查看>>
ubuntu: firefox+flashplay
查看>>
web.xml 中CharacterEncodingFilter类的学习
查看>>
贪吃蛇逻辑代码
查看>>
ASP.NET视频教程 手把手教你做企业论坛网站 视频教程
查看>>
[LeetCode] Meeting Rooms II
查看>>
从Swift学习iOS开发的路线指引
查看>>
Scribes:小型文本编辑器,支持远程编辑
查看>>