反射:
Class c = Class.forName ("java.lang.Integer");
这条语句得到一个 Integer类的类对象。还有另一种方法,如下面的语句:
Class c = Integer.class;
或者
Class c = Integer.TYPE;
它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。
第二步是调用诸如 getDeclaredMethods 的方法,以取得该类中定义的所有方法的列表。
一旦取得这个信息,就可以进行第三步了。
第三步是使用 reflection API 来操作这些信息,如下面这段代码:
Class c = Class.forName("java.lang.String");
Method m[] = c.getDeclaredMethods();
System.out.println(m[0].toString());
它将以文本方式打印出 String 中定义的第一个方法的原型。
反射经常由框架型代码使用,由于这一点,我们可能希望框架能够全面接入代码,无需考虑常规的接入限制。例如当代码在不值得信任的代码共享的环境中运行时。
假设有以下这个类的声明:
class DemoReflection
{
private String name = null;
private void doPrint(String s) {
System.out.println("print....."+s);
}
};
可以肯定的是,这个类中的属性name和方法doPrint都是无法对外展示的,但是使用了反射以后就可以办到。
package com.glsc.xu.search;
import java.lang.reflect.Method;
public class TestReflection {
public static void main(String args[]) {
try {
// 通过反映射技术得到DemoReflection的类型
Class cls = Class.forName("com.test.DemoReflection");
// 动态创建DemoReflection类的实力
Object instance = cls.newInstance();
// 通过反映射技术得到DemoReflection的非公有方法doPrint
Method m = cls.getDeclaredMethod("doPrint",
new Class[] { String.class });
// 表示可以随意访问该类中的方法
m.setAccessible(true);
// 调用doPrint方法
String s="hello world";
m.invoke(instance, new Object[] { s });
} catch (Exception ex) {
System.out.println(ex);
}
}
}
在该代码中,读者可能看到了一个比较陌生的方法setAccessible,这个方法非常重要,如果它不被设置成true那么所有非公有方法仍然无法调用,所以在调用非公有方法的时候需要注意这点。
分享到:
相关推荐
java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射
JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用
java反射
java反射,获取所有属性、方法以及List集合类
java反射java反射java反射java反射java反射
Java反射
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
1.通过Java反射机制获取JavaBean对象。 2.通过JavaBean全路径字符串获取JavaBean对象。 3.获取JavaBean注解信息
Java反射经典实例 Java反射经典实例 Java反射经典实例 Java反射经典实例
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc...
java 反射 调用私有方法(有参数私有方法)获取私有属性值
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
java 反射demo
java反射获取所有属性,获取所有get方法,包括子类父类,以及包括List集合类
java 反射中操作数组 java 反射中操作数组 java 反射中操作数组
Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档
java反射理论及实现
java反射机制原理和反射机制总结!!! java反射机制原理和反射机制总结!!!