Java基础——Modifier类
转自:https://www.cnblogs.com/baiqiantao/p/7478523.html 反射 Reflect Modifier 修饰符工具类
在查看反射相关的Class、Field 、Constructor 等类时,看到他们都有这样一个方法:getModifiers():返回此类或接口以整数编码的 Java 语言修饰符。如需要知道返回的值所代表的意思,则需要用到 java.lang.reflect.Modifier 这个类,这个类提供了 static 方法和常量,可以对类和成员访问修饰符进行解码。
既然是位于 java.lang.reflect 下,那说明一般是在动态加载过程中、使用java反射对某些类进行过滤时会用到,一般开发并不是很常用。但是对于写框架,个人还是觉得可以用到的。
Modifier 修饰符工具类
public class java.lang.reflect.Modifier extends Object
JDK中的介绍:
Modifier 类提供了 static 方法和常量,对类和成员访问修饰符进行解码。修饰符集被表示为整数,用不同的位位置 (bit position) 表示不同的修饰符。表示修饰符的常量值取自于 The JavaTM Virtual Machine Specification, Second edition 的表 4.1、4.4、4.5 和 4.7。
访问修饰符列表
- public static final int PUBLIC = 0x00000001;
- public static final int PRIVATE = 0x00000002;
- public static final int PROTECTED = 0x00000004;
- public static final int STATIC = 0x00000008;
- public static final int FINAL = 0x00000010;
- public static final int SYNCHRONIZED = 0x00000020; 同步
- public static final int VOLATILE = 0x00000040; 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。
- public static final int TRANSIENT = 0x00000080; 用transient关键字标记的成员变量不参与序列化过程。
- public static final int NATIVE = 0x00000100;
- public static final int INTERFACE = 0x00000200;
- public static final int ABSTRACT = 0x00000400;
- public static final int STRICT = 0x00000800; 即strictfp(strict float point 精确浮点),此关键字可应用于类、接口或方法。
解码方法
以上所有的修饰符都有对应的、方法声明为【public static boolean is***(int mod)】的解码方法,且方法的实现也都是类似的,比如:
-
public static boolean isPublic(int mod) {
-
return (mod & PUBLIC) != 0;
-
}
新增的方法
1.7及1.8中新增了几个API,目的是对CLASS、INTERFACE、CONSTRUCTOR、METHOD、FIELD、PARAMETER等类型的对象可以使用的所有修饰符。
-
private static final int CLASS_MODIFIERS =
-
Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE |
-
Modifier.ABSTRACT | Modifier.STATIC | Modifier.FINAL |
-
Modifier.STRICT;
-
public static int classModifiers() {
-
return CLASS_MODIFIERS;
-
}
-
-
private static final int INTERFACE_MODIFIERS =
-
Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE |
-
Modifier.ABSTRACT | Modifier.STATIC | Modifier.STRICT;
-
public static int interfaceModifiers() {
-
return INTERFACE_MODIFIERS;
-
}
-
-
private static final int CONSTRUCTOR_MODIFIERS =
-
Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE;
-
public static int constructorModifiers() {
-
return CONSTRUCTOR_MODIFIERS;
-
}
-
-
private static final int METHOD_MODIFIERS =
-
Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE |
-
Modifier.ABSTRACT | Modifier.STATIC | Modifier.FINAL |
-
Modifier.SYNCHRONIZED | Modifier.NATIVE | Modifier.STRICT;
-
public static int methodModifiers() {
-
return METHOD_MODIFIERS;
-
}
-
-
private static final int FIELD_MODIFIERS =
-
Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE |
-
Modifier.STATIC | Modifier.FINAL | Modifier.TRANSIENT |
-
Modifier.VOLATILE;
-
public static int fieldModifiers() {
-
return FIELD_MODIFIERS;
-
}
-
-
private static final int PARAMETER_MODIFIERS =
-
Modifier.FINAL;
-
public static int parameterModifiers() {
-
return PARAMETER_MODIFIERS;
-
}
toString 方法的实现
-
public static String toString(int mod) {
-
StringBuilder sb = new StringBuilder();
-
int len;
-
-
if ((mod & PUBLIC) != 0) sb.append("public ");
-
if ((mod & PROTECTED) != 0) sb.append("protected ");
-
if ((mod & PRIVATE) != 0) sb.append("private ");
-
-
/* Canonical典范、规范 order */
-
if ((mod & ABSTRACT) != 0) sb.append("abstract ");
-
if ((mod & STATIC) != 0) sb.append("static ");
-
if ((mod & FINAL) != 0) sb.append("final ");
-
if ((mod & TRANSIENT) != 0) sb.append("transient ");
-
if ((mod & VOLATILE) != 0) sb.append("volatile ");
-
if ((mod & SYNCHRONIZED) != 0) sb.append("synchronized ");
-
if ((mod & NATIVE) != 0) sb.append("native ");
-
if ((mod & STRICT) != 0) sb.append("strictfp ");
-
if ((mod & INTERFACE) != 0) sb.append("interface ");
-
-
/* trim trailing space */
-
if ((len = sb.length()) > 0) return sb.toString().substring(0, len-1);
-
return "";
-
}
示例1:解码mod演示
-
public class Test {
-
private static final transient int temp = 1;
-
-
public static void main(String[] args) throws Exception {
-
testModifier(Test.class.getDeclaredField("temp").getModifiers());//154。private static final transient
-
testModifier(Test.class.getMethod("main", String[].class).getModifiers());//9。public static
-
}
-
-
public static void testModifier(int mod) {
-
System.out.println("----------------------【mod=" + mod + "】----------------------");
-
System.out.println("【toString】" + Modifier.toString(mod));
-
System.out.println("【isPublic】" + Modifier.isPublic(mod));
-
System.out.println("【isPrivate】" + Modifier.isPrivate(mod));
-
System.out.println("【isProtected】" + Modifier.isProtected(mod));
-
System.out.println("【isStatic】" + Modifier.isStatic(mod));
-
System.out.println("【isFinal】" + Modifier.isFinal(mod));
-
System.out.println("【isSynchronized】" + Modifier.isSynchronized(mod));
-
System.out.println("【isVolatile】" + Modifier.isVolatile(mod));
-
System.out.println("【isTransient】" + Modifier.isTransient(mod));
-
System.out.println("【isNative】" + Modifier.isNative(mod));
-
System.out.println("【isInterface】" + Modifier.isInterface(mod));
-
System.out.println("【isAbstract】" + Modifier.isAbstract(mod));
-
System.out.println("【isStrict】" + Modifier.isStrict(mod));
-
}
-
}
示例2:不同类型元素可使用的修饰符
-
System.out.println(Modifier.toString(Modifier.classModifiers()));//public protected private abstract static final strictfp
-
System.out.println(Modifier.toString(Modifier.interfaceModifiers()));//public protected private abstract static strictfp
-
System.out.println(Modifier.toString(Modifier.constructorModifiers()));//public protected private
-
System.out.println(Modifier.toString(Modifier.methodModifiers()));//public protected private abstract static final synchronized native strictfp
-
System.out.println(Modifier.toString(Modifier.fieldModifiers()));//public protected private static final transient volatile
-
System.out.println(Modifier.toString(Modifier.parameterModifiers()));//final
Java基础——Modifier类的更多相关文章
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...
- java基础-BigInteger类常用方法介绍
java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...
- java基础-Arrays类常用方法介绍
java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...
- java基础-Math类常用方法介绍
java基础-Math类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Math类概念 Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函 ...
- java基础-System类常用方法介绍
java基础-System类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.System类概念 在API中system类介绍的比较简单,我们给出定义,system中 ...
- java基础-Integer类常用方法介绍
java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...
- Java基础-Calendar类常用方法介绍
Java基础-Calendar类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Calendar类概念 Calendar 类是一个抽象类,它为特定瞬间与一组诸如 Y ...
- Java基础-Date类常用方法介绍
Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...
随机推荐
- RMQ的ST算法
·RMQ的ST算法 状态设计: F[i, j]表示从第i个数起连续2^j个数中的最大值 状态转移方程(二进制思想): F[i, j]=max(F[i,j-1], ...
- Map循环/迭代/遍历效率、性能问题。
项目开发完毕,为了找点事打发一下时间,于是用findBugs插件对当前完工的项目进行扫描,发现了很多问题.其中有个关于性能的问题,在这里记录一下. 提示信息为:Inefficient use of k ...
- [CSP-S模拟测试]:你相信引力吗(单调栈)
题目传送门(内部题124) 输入格式 第一行一个整数$n$代表环的长度. 第二行$n$个整数表示每个冰锥的高度. 输出格式 一行一个整数表示有多少对冰锥是危险的. 样例 样例输入1: 51 2 4 5 ...
- [CSP-S模拟测试]:笨小猴(随机化)
题目传送门(内部题118) 输入格式 输入第一行是一个整数$n$,意义如以上所示. 接下来有$2n+1$行,每行为两个正整数,第$i$行的两个正整数分别代表$A_i$和$B_i$. 输出格式 如果无法 ...
- MyOD C语言代码实现
Myod C语言实现 一.题目要求 1 复习c文件处理内容 2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写Ma ...
- 笔记本电脑如何同时上内外网(通过usb外接网卡实现虚拟机连外网)
我们这里达成的方式不是内外网切换,而是真正意义上的同时上内网和外网 原理: 通过构建虚拟机,利用usb外接网卡(某宝某东都有售,价格在50大洋左右)使虚机连接外网,然后开启虚拟机的unity模式 准备 ...
- 搭建jenkins集群node结点
配置结点 首先,需要在jenkins的系统设置中新增一个结点 系统管理 -> 节点管理 -> New Node 配置Remote root directory最好和主jenkins的路径一 ...
- leetcode 56区间合并
class Solution { public: static bool cmp(vector<int> a,vector<int> b){ ]<b[]; } vecto ...
- Zxing二维码的集成使用
在github网站搜索Zxing 详见:https://github.com/yipianfengye/android-zxingLibrary 在module的build.gradle中执行comp ...
- Ubuntu16.04小白入门分享之 玩转Ruby你需要安装什么软件(持续更新)
Ubuntu提示功能很强大,一般如果你想安装什么软件,可以直接输入名字,然后会有提示,安装格式一般为: sudo apt install 名字 Ubuntu14.04/16.04命令行快速安装Ruby ...