Java Reflection 教程(2): Classes 类定义
来源:互联网 发布:知乎性价比高围巾品牌 编辑:程序博客网 时间:2024/05/17 07:21
使用Java Reflection (有翻译成反射的)API可以在程序运行时动态查询类的定义,查询类的定义是使用Java Reflection API 所要作的第一件事.
也就是说所有反射操作的入口点为java.lang.Class 类。有下面几种方法可以取得某个数据类型对应的Class类:
Object.getClass()
当可以访问一个类型的实例对象时,一个简单的方法使用通过Object.getClass() 来取得该对象的类型定义,如下例可以取得String的类定义:
Class c = "foo".getClass();
使用 .class
如果已知某个类的类型,可以直接使用.class 来取的类的定义,这也是用来取的基本数据类型(如boolean,int等)的方法。
boolean b;Class c = b.getClass(); // compile-time error Class c = boolean.class; // correct
注: 不能使用b.getClass() 来取的boolean 的类型定义,这是因为基本数据类型无法dereferenced.
Class.forName()
如果知道类的全名称,可以使用Class.forName() 来取得该类的类定义。如:
Class c = Class.forName("com.duke.MyLocaleServiceProvider");
取的对应的数组类型的类型定义可以使用”[".
Class cDoubleArray = Class.forName("[D"); Class cStringArray = Class.forName("[[Ljava.lang.String;");
TYPE 域
对应基本数据类型,除了使用.class 方法外,还可以使用其对应的Type 成员。如:
Class c = Double.TYPE;Class v = Void.TYPE;
有了类对应的Class 定义之后,可以获取类的:
- Class Name 类名称
- Class Modifies (public ,private ,synchronized etc) 类修饰符
- Package Info 类所在包的信息。
- Superclass 父类定义
- Implemented Interfaces 类实现的接口定义
- Constructors 类构造函数定义
- Methods 类方法定义
- Fields 类成员变量定义
- Annotations 类标注定义
1. 获取Class名称
取得Class的全名
Class aClass = ... //obtain Class object. See prev. sectionString className = aClass.getName();
如果不需要package ,只要Class名称,可以使用getSimpleName
Class aClass = ... //obtain Class object. See prev. sectionString simpleClassName = aClass.getSimpleName();
2. 获取类修饰符
类可以使用public ,private ,static 加以修饰,getModifiers()可以用来获取类修饰符定义。
Class aClass = ... //obtain Class object. See prev. sectionint modifiers = aClass.getModifiers();
根据getModifiers() 的返回值,可以使用Modifier.ixXXX 来判断修饰符类型:
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)
3. 获取类所在包的信息
Class aClass = ... //obtain Class object. See prev. sectionPackage package = aClass.getPackage();
通过Package 可以得到包的名称等信息。
4. 获取父类定义
Class superclass = aClass.getSuperclass();
superclass 也是Class类型,使用可以再使用Class的方法来访问父类的定义。
5. 获取类实现的接口定义
Class aClass = ... //obtain Class object. See prev. sectionClass[] interfaces = aClass.getInterfaces();
类可以实现多个接口,要注意的是,这个方法只返回该类直接定义的接口类型,不返回父类实现的接口类型。
6. 获取构造函数
Constructor[] constructors = aClass.getConstructors();
7. 获取类的方法定义
Method[] method = aClass.getMethods();
8. 获取类的成员定义
Method[] method = aClass.getFields();
9. 获取类的标注信息
Annotation[] annotations = aClass.getAnnotations();
- Java Reflection 教程(2): Classes 类定义
- Java Reflection-classes
- Java Reflection-Classes
- Java Reflection - Classes
- Java Reflection(二):Classes
- Java Reflection(二):Classes
- Java Reflection(二):Classes
- Java Reflection 教程(5):Methods 类方法
- Java Reflection 教程(8):Annotations类标注
- Java Reflection教程
- Java Reflection 教程(1): 概述
- Java Reflection 反射教程 [转]
- Java Reflection 教程(7):类私有成员变量和方法
- java reflection part 2
- Java--Reflection 浅析2
- Java Reflection 教程(3):Constructor 构造函数
- Java Reflection 教程(4):Fields 成员变量
- Java Reflection 教程(6):Getters和Setters
- Android测试教程(10):ActivityInstrumentationTestCase2示例
- IoAttachDevice;IoAttachDeviceToDeviceStack
- Android OpenGL ES 开发教程(10):绘制线段Line Segment
- Oracle培训的一些感受
- Android ApiDemos示例解析(8):App->Activity->Hello world
- Java Reflection 教程(2): Classes 类定义
- 敏捷个人2012.5月份户外活动报道:0费用京郊经典户外路线【京西古道】
- KMP算法解决字符串匹配问题
- Oracle10g Release 2手工建立数据库步骤
- 没什么原因的感到不爽
- Android中发出“GET”和“POST”请求和得到响应的运用
- VC 绘图,使用双缓冲技术实现
- ext3/ext4文件系统大分区支持
- Core Java 第一章知识点总结