关于java反射机制
2011-02-02 10:59
232 查看
反射就是将java类中的各个成分映射成为java类来进行操作。它提供了一种动态的功能,使我们可以在运行时获取类的信息。JVM为每个类创建一个Class类的实例,它包含了一个java类的全部信息,例如类名、方法(Method)、属性(Field)、构造器(Constructor)等。通过Class,我们就可以对这些信息进行操作。
在java中,反射的实现还依赖于java.lang.reflect包中的接口、类。Structs、Spring、Hibernate等框架,都是基于这些反射API来实现其动态功能的。
下面通过一些例子来说明:
获取Class类的3种方法
Class.forName("com.test.Example"); 使用完整包名
Class<Example> clazz = Example.class; 静态属性
Example ex = new Example();
Class<Example> exclass = ex.getClass(); 调用getClass方法
测试类
class Test{
private String ha;
private int num;
public Test(){
super();
}
public Test(String ha,int num){
super();
this.ha=ha;
this.num=num;
}
public void me(){
System.out.println("happy new year!");
}
}
(1)Field
Test test = new Test("hi",100);
Field field = test.getClass().getDeclaredField("num");
int num1 = (Integer)field.get(test);
(2)Method
Class<Test> exclass = Test.class;
try{
Method m = exclass.getDeclaredMethod("me");
if(m!=null){
Test test = exclass.newInstance();
m.invoke(test); //test对象 调用此Method对象表示的底层方法,即方法me()
}
}catch(Exception e){
e.printStackTrace();
}
(3)Constructor
Class<Test> exclass = Test.class;
Test test = exclass.newInstance();
Constructor<Test> con = exclass.getConstructor(String.class,int.class);
test = con.newInstance("world",180); //用构造器创建对象
System.out.println(test); //打印信息
(4)访问私有成员
Field field = exclass.getDeclaredField("ha");
field.setAccessible(true); //设置可访问属性为true,即在使用时取消java语言访问检查
System.out.println(field.get(test)); //打印test对象上此Field表示的字段值,即ha的值
在java中,反射的实现还依赖于java.lang.reflect包中的接口、类。Structs、Spring、Hibernate等框架,都是基于这些反射API来实现其动态功能的。
下面通过一些例子来说明:
获取Class类的3种方法
Class.forName("com.test.Example"); 使用完整包名
Class<Example> clazz = Example.class; 静态属性
Example ex = new Example();
Class<Example> exclass = ex.getClass(); 调用getClass方法
测试类
class Test{
private String ha;
private int num;
public Test(){
super();
}
public Test(String ha,int num){
super();
this.ha=ha;
this.num=num;
}
public void me(){
System.out.println("happy new year!");
}
}
(1)Field
Test test = new Test("hi",100);
Field field = test.getClass().getDeclaredField("num");
int num1 = (Integer)field.get(test);
(2)Method
Class<Test> exclass = Test.class;
try{
Method m = exclass.getDeclaredMethod("me");
if(m!=null){
Test test = exclass.newInstance();
m.invoke(test); //test对象 调用此Method对象表示的底层方法,即方法me()
}
}catch(Exception e){
e.printStackTrace();
}
(3)Constructor
Class<Test> exclass = Test.class;
Test test = exclass.newInstance();
Constructor<Test> con = exclass.getConstructor(String.class,int.class);
test = con.newInstance("world",180); //用构造器创建对象
System.out.println(test); //打印信息
(4)访问私有成员
Field field = exclass.getDeclaredField("ha");
field.setAccessible(true); //设置可访问属性为true,即在使用时取消java语言访问检查
System.out.println(field.get(test)); //打印test对象上此Field表示的字段值,即ha的值
相关文章推荐
- 关于java'反射机制,获得类的所有方法与字段
- 关于Java反射机制中的Field简单尝试与示例以及说明
- 关于java反射机制的学习
- 关于java的反射机制及动态代理
- 关于Java中反射机制的深入讲解
- 关于Java的反射机制,你需要理解这些..
- 关于Java反射机制的一个实例
- 关于Java的反射机制,你需要理解这些...
- 关于Java中反射机制的原理理解
- 关于java反射机制的粗略理解
- 关于java反射机制的理解
- (转)关于Java的反射机制,你需要理解这些..
- 关于Java的反射机制,你需要理解这些...
- 关于JAVA反射机制
- 关于java反射机制
- 关于java反射机制复习的那些事
- 关于Java反射机制
- Java中关于函数回调和反射机制的介绍
- Java中的反射机制(五) 关于Class类的补充说明
- 关于Java语言中如何运用反射机制执行某个确定类的构造方法(一)