Java 反射:Classes
来源:互联网 发布:mac office365 编辑:程序博客网 时间:2024/06/05 23:59
Class对象
在想要知道一个类信息之前,需要获得该类的Class对象,java中类的属性,方法,接口,类型都与该Class对象有关。如果你在编译期知道一个类的名字的话,那么你可以使用如下的方式获取一个类的Class对象。
Class myClass= MyObject.class;
如果你在编译期不知道类的名字,但是你可以在运行期获得到类名的字符串,那么你则可以这么做来获取Class对象:
String className = "xxx";//在运行期获取的类名字符串 Class class = Class.forName(className);
在使用Class.forName()方法时,你必须提供一个类的全名,这个全名包括类所在的包的名字。例如MyObject类位于com.honjane.app包,那么他的全名就是com.honjane.app.MyObject。
如果在调用Class.forName()方法时,没有在编译路径下(classpath)找到对应的类,那么将会抛出ClassNotFoundException。
类名
你可以从Class对象中类名有两种。
1、通过getName() 方法返回类的全限定类名(包含包名):
Class aClass = Class.forName("xxxx"); String className = aClass.getName();
2、如果你仅仅只是想获取类的名字(不包含包名),那么你可以使用getSimpleName()方法:
Class aClass = Class.forName("xxxx"); String simpleClassName = aClass.getSimpleName();
构造器
Constructor[] constructors = aClass.getConstructors();
方法
获得所以公开方法:所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法。
Method [ ] methods = aClass.getMethods();
获得方法包含私有方法:包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。
Method [ ] methods = aClass.getDeclaredMethods();
获得单个方法:
Method method1= aClass.getMethod(methodName, parameterTypes) ; Method method2 aClass.getDeclaredMethod(methodName, parameterTypes);
属性
同理method有两个方法获取
Field[] method1= aClass.getFields();Field[] method2= aClass.getDeclaredFields();
注解
你可以通过如下方式访问一个类的注解:
Annotation[] annotations = aClass.getAnnotations();
父类
通过Class对象你可以访问类的父类,superclass对象其实就是一个Class类的实例,所以你可以继续在这个对象上进行反射操作
Class superClass = aClass.getSuperClass();
接口
Class[] interfaces = aClass.getInterfaces();
由于一个类可以实现多个接口,因此getInterfaces();方法返回一个Class数组,在Java中接口同样有对应的Class对象。
注意:getInterfaces()方法仅仅只返回当前类所实现的接口。当前类的父类如果实现了接口,这些接口是不会在返回的Class集合中的,尽管实际上当前类其实已经实现了父类接口。
包信息
Package package = aClass.getPackage();
通过Package对象你可以获取包的相关信息,比如包名,你也可以通过Manifest文件访问位于编译路径下jar包的指定信息,比如你可以在Manifest文件中指定包的版本编号
修饰符
可以通过Class对象来访问一个类的修饰符,即public,private,static等等的关键
int modifiers = aClass.getModifiers();
修饰符都被包装成一个int类型的数字,这样每个修饰符都是一个位标识(flag bit),这个位标识可以设置和清除修饰符的类型。
可以使用java.lang.reflect.Modifier类中的方法来检查修饰符的类型:
Modifier.isAbstract(int modifiers); Modifier.isFinal(int modifiers); Modifier.isInterface(int modifiers); Modifier.isNative(int modifiers); Modifier.isPrivate(int modifiers); Modifier.isProtected(int modifiers); Modifier.isPublic(int modifiers); Modifier.isStatic(int modifiers); Modifier.isStrict(int modifiers); Modifier.isSynchronized(int modifiers); Modifier.isTransient(int modifiers); Modifier.isVolatile(int modifiers);
- Java 反射:Classes
- [Java]反射指南二之Classes
- Java中的Nested Classes和Inner Classes
- Loading Java Classes
- classes in java
- Java Foundation Classes Hierarchy
- Java Reflection-classes
- Java Reflection-Classes
- Java Abstract Classes
- Popular Java Classes
- Java Reflection - Classes
- Java Reflection(二):Classes
- 03. Java Classes
- Java Reflection(二):Classes
- java-basics [nested classes]
- 2.22 Java notes - Enumeration Classes
- Java Wrapper Classes Interview Questions
- Java-Abstract classes and methods
- sqoop 测试
- 非递归求解斐波那契数列
- 后台返回秒数 计算剩余时间
- Fiddler调试工具
- Hadoop单机安装详细步骤
- Java 反射:Classes
- 文件上传时候可能遇到的问题
- why you can't focus on one thing
- struts之文件下载
- Android WebView的坑总结
- Codeforces 431C k-Tree (基础dp)
- jquery highcharts组件--纵向柱状图标实例
- operator new之non-member operator new固守规则
- [Android基础] WebView