Java 反射
来源:互联网 发布:沃尔沃如何安装软件 编辑:程序博客网 时间:2024/04/30 00:02
Java Reflection
Java 反射(Reflection)是一种在运行时无需知道类名和方法名,就能检查类,接口,变量以及方法的机制。在编译时,反射机制可以实例化对象,调用方法,以及 Get/Set属性变量。
+ 反射用例
Method[] methods = MyObject.class.getMethods();for (Method method : methods) { System.out.println("method name = " + method.getName());}
这个例子从MyObject
类获取了类对象,使用这个类对象获取了MyObject
类所有的方法数组,并遍历这些方法的名称。
类 Classes
使用Java 反射的第一步通常是在运行时检索Java类,通常对于Java类可以获取的信息包括:
- 类名 Class Name
- 类修饰符 Class Modifiers(public, private, synchronized etc.)
- 包信息 Package Info
- 超类 Superclass
- 实现的接口 Implemented Interfaces
- 构造方法 Constructors
- 方法 Methods
- 属性变量(域) Fields
- 注解 Annotations
类对象 Class Object
在检查类之前,通常需要获取去它的java.lang.Class
对象,Java中所有的类包含这个基础类型。
在编译时如果知道一个类的名称,我们可以通过如下方式获取类对象: Class myObjectClass = MyObject.class;
编译时如果不知道类的名称,但是在运行时知道类名的字符串(class name as a string),可以通过如下方式获取类对象:
String className = ...;// 运行时获取的类名字符串Class class = Class.forName(className);
Class.forName()
方法在 classpath 未发现类时抛出ClassNotFoundException
异常。
类名 Class Name
通过类对象获取类名有两种方式:
Class class = ...; // 类对象String className = class.getName(); // 类完整的名称String simpleClassName = class.getSimpleName(); // 类的简单名称 e.g. psfs TAG = MainActivity.class.getSimpleName();
修饰符 Modifiers
通过类对象获取类修饰符:
Class class = ...;int modifiers = class.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)
包信息 Package Info
通过类对象获取包信息:
Class class = ...;Package package = class.getPackage();
包对象还有很多信息,如包的version number,参见:Package
超类 Superclass
通过类对象获取超类: Class superclass = class.getSuperclass();
实现的接口 Implemented Interfaces
通用类对象获取类所实现的接口:
Class class = // 类对象Class[] interfaces = class.getInterfaces();
类可以实现多个接口,Java反射使用Class表示接口的类型。注意返回的接口数组仅包含当前类所实现的接口,不包含当前类的超类所实现的接口。
构造方法 Constructors
通过类对象获取类的构造方法: Constructor[] constructors = class.getConstructors();
方法 Methods
通过类对象获取类的方法: Method[] method = class.getMethods();
属性变量(域) Fields
通过类对象获取域的方法: Field[] fields = class.getFields();
注解 Annotations
通过类对象获取注解的方法: Annotations[] annotations = class.getAnnotations();
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- SummerHost空间去广告
- jdbc 基本讲解
- Android 传感器概述
- 一组惊艳的NodeJs包
- 245.Subtree-子树(容易题)
- Java 反射
- CoffeeScript系列教程(五)—作用域
- android:TextView相关使用问题
- 内存优化 . 内存泄露 内存溢出 内存抖动 分析与解决.android stido 工具
- canvas中绘制图片居中
- thinkphp上传图片及生成缩略图
- 存储过程详解
- resin简介
- EasyUi定义rowstyler