Java反射05 : 修饰符Modifier静态方法学习示例
超级通道: Java泛型学习系列-绪论
java.lang.reflect.Modifier类提供了用于获取和转换修饰符(即public,private,static等等的关键字)的静态方法。
1.通过Modifier可以做什么
通过Modifier可以做以下事情:
- 可以获取每个Java修饰符对应的int值
- 可以将int值转换成相应的Java修饰符
- 可以判断某个int值是否能转换成一个修饰符
- 可以获取所有接口(interface)的修饰符
- 可以获取所有类(Class)的修饰符
- 可以获取所有构造器(Constructor)的修饰符
- 可以获取所有字段(Field)的修饰符
- 可以获取所有方法(Method)的修饰符
2.代码示例
/*** <p>java.lang.reflect.Modifier示例</p>** @author hanchao 2018/2/27 21:19**/
public class ReflectModifierDemo {private static final Logger LOGGER = Logger.getLogger(ReflectModifierDemo.class);/*** <p>java反射-修饰符 示例</p>** @author hanchao 2018/2/27 21:19**/public static void main(String[] args) {//通过Modifier.toString(modifier)可以将十进制值解析成对应的修饰符LOGGER.info("通过Modifier.toString(modifier)可以将十进制值解析成对应的修饰符");LOGGER.info("Modifier.toString(1) = " + Modifier.toString(1));LOGGER.info("Modifier.toString(2) = " + Modifier.toString(2) + "\n");//通过Modifier.isZzzz(1)[Zzzz=全部修饰符]判断是否为某个修饰符LOGGER.info("通过Modifier.isZzzz(1)[Zzzz=全部修饰符]判断是否为某个修饰符");LOGGER.info("Modifier.isPublic(1) = " + Modifier.isPublic(1));LOGGER.info("Modifier.isPublic(2) = " + Modifier.isPublic(2) + "\n");//通过Modifier.xxxModifiers可以获取某项目(interface/class/constructor/field/method/)对应的所有修饰符LOGGER.info("通过Modifier.xxxModifiers可以获取某项目(interface/class/constructor/field/method/)对应的所有修饰符");LOGGER.info("Modifier.toString(Modifier.interfaceModifiers()) = " + Modifier.toString(Modifier.interfaceModifiers()));LOGGER.info("Modifier.toString(Modifier.classModifiers()) = " + Modifier.toString(Modifier.classModifiers()));LOGGER.info("Modifier.toString(Modifier.constructorModifiers()) = " + Modifier.toString(Modifier.constructorModifiers()));LOGGER.info("Modifier.toString(Modifier.fieldModifiers()) = " + Modifier.toString(Modifier.fieldModifiers()));LOGGER.info("Modifier.toString(Modifier.methodModifiers()) = " + Modifier.toString(Modifier.methodModifiers()) + "\n");//通过Modifier.FIELD可以获取每个修饰符对应的十进制值和十六进制值LOGGER.info("通过Modifier.FIELD可以获取每个修饰符对应的十进制值和十六进制值");LOGGER.info("Modifier.PUBLIC = " + Modifier.PUBLIC + " = 0x" +String.format("%08x",Modifier.PUBLIC));LOGGER.info("Modifier.PRIVATE = " + Modifier.PRIVATE + " = 0x" +String.format("%08x",Modifier.PRIVATE));LOGGER.info("Modifier.PROTECTED = " + Modifier.PROTECTED + " = 0x" +String.format("%08x",Modifier.PROTECTED));LOGGER.info("Modifier.STATIC = " + Modifier.STATIC + " = 0x" +String.format("%08x",Modifier.STATIC));LOGGER.info("Modifier.FINAL = " + Modifier.FINAL + " = 0x" +String.format("%08x",Modifier.FINAL));LOGGER.info("Modifier.SYNCHRONIZED = " + Modifier.SYNCHRONIZED + " = 0x" +String.format("%08x",Modifier.SYNCHRONIZED));LOGGER.info("Modifier.VOLATILE = " + Modifier.VOLATILE + " = 0x" +String.format("%08x",Modifier.VOLATILE));LOGGER.info("Modifier.TRANSIENT = " + Modifier.TRANSIENT + " = 0x" +String.format("%08x",Modifier.TRANSIENT));LOGGER.info("Modifier.NATIVE = " + Modifier.NATIVE + " = 0x" +String.format("%08x",Modifier.NATIVE));LOGGER.info("Modifier.INTERFACE = " + Modifier.INTERFACE + " = 0x" +String.format("%08x",Modifier.INTERFACE));LOGGER.info("Modifier.ABSTRACT = " + Modifier.ABSTRACT + " = 0x" +String.format("%08x",Modifier.ABSTRACT));LOGGER.info("Modifier.STRICT = " + Modifier.STRICT + " = 0x" +String.format("%08x",Modifier.STRICT) + "\n");//一个由十六进制(取值范围:001~800)值组合的值,可以代表多个修饰符LOGGER.info("一个由十六进制(取值范围:001~800)值组合的值,可以代表多个修饰符");LOGGER.info("Modifier.toString(1 + 4 + 512) = " + Modifier.toString(1 + 4 + 512));LOGGER.info("Modifier.constructorModifiers() = " + Modifier.constructorModifiers() + " = " + Modifier.toString(Modifier.constructorModifiers()));}
}
3.运行结果
2018-03-03 23:18:32 INFO ReflectModifierDemo:22 - 通过Modifier.toString(modifier)可以将十进制值解析成对应的修饰符
2018-03-03 23:18:32 INFO ReflectModifierDemo:23 - Modifier.toString(1) = public
2018-03-03 23:18:32 INFO ReflectModifierDemo:24 - Modifier.toString(2) = private2018-03-03 23:18:32 INFO ReflectModifierDemo:27 - 通过Modifier.isZzzz(1)[Zzzz=全部修饰符]判断是否为某个修饰符
2018-03-03 23:18:32 INFO ReflectModifierDemo:28 - Modifier.isPublic(1) = true
2018-03-03 23:18:32 INFO ReflectModifierDemo:29 - Modifier.isPublic(2) = false2018-03-03 23:18:32 INFO ReflectModifierDemo:32 - 通过Modifier.xxxModifiers可以获取某项目(interface/class/constructor/field/method/)对应的所有修饰符
2018-03-03 23:18:32 INFO ReflectModifierDemo:33 - Modifier.toString(Modifier.interfaceModifiers()) = public protected private abstract static strictfp
2018-03-03 23:18:32 INFO ReflectModifierDemo:34 - Modifier.toString(Modifier.classModifiers()) = public protected private abstract static final strictfp
2018-03-03 23:18:32 INFO ReflectModifierDemo:35 - Modifier.toString(Modifier.constructorModifiers()) = public protected private
2018-03-03 23:18:32 INFO ReflectModifierDemo:36 - Modifier.toString(Modifier.fieldModifiers()) = public protected private static final transient volatile
2018-03-03 23:18:32 INFO ReflectModifierDemo:37 - Modifier.toString(Modifier.methodModifiers()) = public protected private abstract static final synchronized native strictfp2018-03-03 23:18:32 INFO ReflectModifierDemo:40 - 通过Modifier.FIELD可以获取每个修饰符对应的十进制值和十六进制值
2018-03-03 23:18:32 INFO ReflectModifierDemo:41 - Modifier.PUBLIC = 1 = 0x00000001
2018-03-03 23:18:32 INFO ReflectModifierDemo:42 - Modifier.PRIVATE = 2 = 0x00000002
2018-03-03 23:18:32 INFO ReflectModifierDemo:43 - Modifier.PROTECTED = 4 = 0x00000004
2018-03-03 23:18:32 INFO ReflectModifierDemo:44 - Modifier.STATIC = 8 = 0x00000008
2018-03-03 23:18:32 INFO ReflectModifierDemo:45 - Modifier.FINAL = 16 = 0x00000010
2018-03-03 23:18:32 INFO ReflectModifierDemo:46 - Modifier.SYNCHRONIZED = 32 = 0x00000020
2018-03-03 23:18:32 INFO ReflectModifierDemo:47 - Modifier.VOLATILE = 64 = 0x00000040
2018-03-03 23:18:32 INFO ReflectModifierDemo:48 - Modifier.TRANSIENT = 128 = 0x00000080
2018-03-03 23:18:32 INFO ReflectModifierDemo:49 - Modifier.NATIVE = 256 = 0x00000100
2018-03-03 23:18:32 INFO ReflectModifierDemo:50 - Modifier.INTERFACE = 512 = 0x00000200
2018-03-03 23:18:32 INFO ReflectModifierDemo:51 - Modifier.ABSTRACT = 1024 = 0x00000400
2018-03-03 23:18:32 INFO ReflectModifierDemo:52 - Modifier.STRICT = 2048 = 0x000008002018-03-03 23:18:32 INFO ReflectModifierDemo:54 - 一个由十六进制(取值范围:001~800)值组合的值,可以代表多个修饰符
2018-03-03 23:18:32 INFO ReflectModifierDemo:55 - Modifier.toString(1 + 4 + 512) = public protected interface
2018-03-03 23:18:32 INFO ReflectModifierDemo:56 - Modifier.constructorModifiers() = 7 = public protected private
4.静态方法分析
结合实例代码与运行结果,进行以下总结:
4.1.Modifier.toString(mod)
通过Modifier.toString(mod)将十进制值转化成修饰符关键字。如:
2018-03-03 23:18:32 INFO ReflectModifierDemo:22 - 通过Modifier.toString(modifier)可以将十进制值解析成对应的修饰符
2018-03-03 23:18:32 INFO ReflectModifierDemo:23 - Modifier.toString(1) = public
2018-03-03 23:18:32 INFO ReflectModifierDemo:24 - Modifier.toString(2) = private
4.2.Modifier.isXxxx(mod)
通过Modifier.isXxxx(mod)判断十进制值是否是某种修饰符,如:
2018-03-03 23:18:32 INFO ReflectModifierDemo:27 - 通过Modifier.isZzzz(1)[Zzzz=全部修饰符]判断是否为某个修饰符
2018-03-03 23:18:32 INFO ReflectModifierDemo:28 - Modifier.isPublic(1) = true
2018-03-03 23:18:32 INFO ReflectModifierDemo:29 - Modifier.isPublic(2) = false
4.3.Modifier.xxxModifiers()
通过Modifier.
xxxModifiers()
可以获取相关类型所允许的修饰符。
其中xxx可取的值有:
interface、class、constructor、field、method。
各类型分别允许的修饰符如下表所示:
序号 | 类型 | 修饰符 |
---|---|---|
1 | interface | public protected private abstract static strictfp |
2 | class | public protected private abstract static final strictfp |
3 | constructor | public protected private |
4 | field | public protected private static final transient volatile |
5 | method | public protected private abstract static final synchronized native strictfp |
4.4.Modifier.XXXXX
通过Modifier.XXXXX能够获取某个修饰符对应的十进制值。
其中XXXXX可取的值有12种:
PUBLIC、PRIVATE、PROTECTED、STATIC、FINAL、SYNCHRONIZED、
VOLATILE、TRANSIENT、NATIVE、INTERFACE、ABSTRACT、STRICT。
通过运行结果,关于Java修饰符对应的十进制和十六进制值,很容整理成如下表格:
序号 | 修饰符 | Modifier对应字段 | 十进制值 | 十六进制值 |
---|---|---|---|---|
1 | public | Modifier.PUBLIC | 1 | 0x00000001 |
2 | private | Modifier.PRIVATE | 2 | 0x00000002 |
3 | protected | Modifier.PROTECTED | 4 | 0x00000004 |
4 | static | Modifier.STATIC | 8 | 0x00000008 |
5 | final | Modifier.FINAL | 16 | 0x00000010 |
6 | synchronized | Modifier.SYNCHRONIZED | 32 | 0x00000020 |
7 | volatile | Modifier.VOLATILE | 64 | 0x00000040 |
8 | transient | Modifier.TRANSIENT | 128 | 0x00000080 |
9 | native | Modifier.NATIVE | 256 | 0x00000100 |
10 | interface | Modifier.INTERFACE | 512 | 0x00000200 |
11 | abstract | Modifier.ABSTRACT | 1024 | 0x00000400 |
12 | strict | Modifier.STRICT | 2048 | 0x00000800 |
通过分析:
各个修饰符都可以转换成一个十六进制值
各个修饰符的十进制值是倍数关系
通过多个修饰符的和值可以反推出这些修饰符的值
如:
517只能分解成1+4+512,即:public protected interface
同理,
Modifier.constructorModifiers() = 7,而7只能分解成1+2+4,即:public protected private
5.总结
- 通过Modifier.FIELD可以获取每个Java修饰符对应的十进制值和十六进制值
- 通过Modifier.toString(modifier)可以将int值转换成相应的Java修饰符
- 通过Modifier.isZzzz(modifier)[Zzzz=全部修饰符]可以判断某个int值是否能转换成一个修饰符
- 通过Modifier.interfaceModifiers()可以获取所有接口(interface)的修饰符
- 通过Modifier.classModifiers()可以获取所有类(Class)的修饰符
- 通过Modifier.constructorModifiers()可以获取所有构造器(Constructor)的修饰符
- 通过Modifier.fieldModifiers()可以获取所有字段(Field)的修饰符
- 通过Modifier.methodModifiers()可以获取所有方法(Method)的修饰符
Java反射05 : 修饰符Modifier静态方法学习示例相关推荐
- java 反射获取修饰符_java之反射和BeanUtils类
反射和BeanUtils类 1. 类的初始化:类什么什么情况下会加载到内存中 只要类加载到内存中,那么类加载器就会为这个类创建一个class文件对象 2. javaBean:数据库中的表和java中的 ...
- java 反射 方法 修饰符_超类中使用默认修饰符的Java反射访问方法
Method method = getClass().getSuperclass().getDeclaredMethod("doSomething"); method.invoke ...
- java中访问修饰符_Java中的非访问修饰符是什么?
java中访问修饰符 Java非访问修饰符 (Java non access modifiers) We have 7 non-access modifiers in Java. The name o ...
- Java中权限修饰符
Java中访问修饰符public.private.protect.default范围 同一个类 同一个包 不同包的子类 不同包的非子类 Private √ Default √ √ Protecte ...
- 关于Java中各种修饰符与访问修饰符的说明
关于Java中各种修饰符与访问修饰符的说明 类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 ...
- Java非访问修饰符
Java非访问修饰符 为了实现一些其他的功能,Java 也提供了许多非访问修饰符. Static:修饰符,用来创建类方法和类变量. Final:修饰符,用来修饰类.方法和变量,final修饰的类不能够 ...
- java中访问修饰符_Java中的访问修饰符介绍
java中访问修饰符 什么是访问修饰符? (What are Access Modifiers?) Have you ever wanted to define how people would ac ...
- Java-Day11 面向对象遍程的入门 (类属性的默认值、构造方法、类的成员、static关键字、类的成员加载顺序、Java(权限)访问修饰符)
目录 1. 类的属性的默认值问题 2. 构造方法(Constructor) 3. 类的成员 3.1 类的成员之一:属性 3.2 UML类图 4. static关键字 5. 类的成员加载(运行)顺序 6 ...
- Java 中的修饰符总结
学习了编写 Java 程序中的修饰符总结,而在编写Java程序时,都会遇到Java中的修饰符总结.所以往下面学习时,应当注意以下几点: 修饰符总结:四个访问控制符:注意:在不写访问控制符的情况下,就是 ...
- java默认访问修饰符是,java默认访问修饰符
java.lapplet.Applet D. java.awt.Frame XXX13.下列选项中,哪个方法不是 JAVA 的访问修饰符(C) A. private B. protected C. f ...
最新文章
- Edge Linking
- 一道百度前端线上笔试题
- formdata怎么传数组_如何使用formData上传file数组
- SAP Spartacus的site context配置
- 计算数字的出现次数 java_关于Java:如何计算数字在.txt文件中出现的次数
- spring bean创建细节
- 【转载】COM 组件设计与应用(二)——GUID 和 接口
- it just sudo_just do it是什么梗
- 爬虫实现原理与实现技术
- mysql centos7安装_Linux——CentOS7之mysql5.7安装与配置
- tpl_main_page.php
- Python对象转json【包括嵌套对象转json,django的model转json】
- 介绍5款非常棒的移动自动化测试工具
- 深大uooc学术道德与学术规范教育第四章
- 让你一遍就会的【单纯形法解线性规划最优】
- H5移动端禁止长按保存图片
- python语音特征提取_使用Python从视频中提取语音
- 【技巧】arcgis制图设置经纬网同时置于最底层
- 代码阅读——十个C开源项目
- 读心术python_有哪些厉害的观人术读心术?
热门文章
- 解决docker中启动Spring Boot微服务注册在Eureka后无法访问的问题
- 电源防反接电路 供电自动切换电路 - MOS管体二极管的应用
- python 大小写字母怎么用数字表示_python判断字符串是字母 数字 大小写(转载)...
- GPD MicroPC 安装 Win10+Ubuntu 双系统
- 皮亚诺的数概念起点和算术公理1-2告诉我们什么?—— 皮亚诺读后之四
- latex图片的子标题放在中间
- 计算机基础与知识点总结,计算机基础知识点总结
- android ibeacon模拟器,未使用信标模拟器检测到iBeacon
- day15_css补充、js基础、dom基础
- C3 linearization