码迷,mamicode.com
首页 > 其他好文 > 详细

关于反射创建对象的演示

时间:2015-04-04 10:44:18      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

虽然网上有很多的做饭,但是对于新手的朋友们来说,并不是能够看得懂。

反射技术:可以对一个类进行解刨,首先要获取该类的字节码文件内容,并将内容都封装成了对象。

访问属性,方法,以及构造函数,然后在调用构造函数,创建对象。

调用空参数的构造函数用的是Class类中的newInstance方法。

调用带参数的构造函数用的是构造函数本身的newInstance方法。

在这里我只做了两种方法,利用反射创建对象,并调用方法,获取变量值。

对于我的这两种方式也有需要优化的地方,但是在这里我们只接受这两种方式。

Class.forName();用于做类加载,指定什么类名就获取什么类的字节码。

getConstructor();获取构造函数,并创建对象,调用方法。获取其变量值

package pack;
import java.lang.reflect.*;
class Reflect{
	public static void main(String[] args)throws Exception{
		Class<?> c=Class.forName("pack.ReflectPoint");c.newInstance();// 接受一个完整类名,并使用Class类中的newInstance创建对象。
		Method method=c.getMethod("add");method.invoke(null);// 获取该对象的方法,并调用。
		Field fieldX=c.getDeclaredField("x");// 由于变量是私有的,所以我们使用暴力反射。
		fieldX.setAccessible(true);
		System.out.println(fieldX.get(c.newInstance()));// 获取该变量的值,Field.get接受的参数必须是一个对象。
		
		Constructor tts=ReflectPoint.class.getConstructor(String.class);// 每一个基本类型都有一个静态的class,获取该类的字节码后并获取一个带参数的
		ReflectPoint r=(ReflectPoint)tts.newInstance(new String("abc"));r.add();// 进行强转,并调用构造函数的newInstance方法,传入参数,调用方法。
		Field fieldY=r.getClass().getField("y");System.out.println(fieldY.get(r));// 获取其变量,
	}
}
class ReflectPoint{
	private static int x=3;
	public static int y=4;
	ReflectPoint(){System.out.println("无参");}
	public ReflectPoint(String s){System.out.println("有参");}
	public static void add(){
		System.out.println(x+y);
	}
}


关于反射创建对象的演示

标签:

原文地址:http://blog.csdn.net/qiang3570/article/details/44871105

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!