Java中的反射机制

反射定义:反射就是把Java累中的各个成分映射成Java对象,在使用的时候,,可以利用反射机制进行使用。

                    反射的作用:主要是用在框架里,被称为框架的“灵魂”。

反射原理:

            

一、访问反射构造方法

注:下面凡是访问到私有方法的时候,都需要用到:

<pre name="code" class="cpp"><span style="white-space:pre">		</span>//代表Reflection类的字节码对象
		Class c=Class.forName("com.dp.java.Reflection.Reflection");
		//得到Reflection构造方法
		Constructor c1=c.getDeclaredConstructor(int.class);//得到含有int参数的私有构造方法?用来创建对象
		c1.setAccessible(true)

public class Reflection_test {
	
	/**
	 * 反射
	 */
	@Test
	public void test1() throws Exception {
		//代表Reflection类的字节码对象
		Class c=Class.forName("com.dp.java.Reflection.Reflection");
		//得到Reflection构造方法
		Constructor c1=c.getConstructor(null);//得到没有参数的构造方法?用来创建对象
		c1.newInstance(null);//创建了构造方法的对象
	}
	
	@Test
	public void test2() throws Exception {
		//代表Reflection类的字节码对象
		Class c=Class.forName("com.dp.java.Reflection.Reflection");
		//得到Reflection构造方法
		Constructor c1=c.getConstructor(String.class);//得到含有string参数的构造方法?用来创建对象
		c1.newInstance("Mr_Li13");//创建了构造方法的对象

	}
	@Test
	public void test3() throws Exception {
		//代表Reflection类的字节码对象
		Class c=Class.forName("com.dp.java.Reflection.Reflection");
		//得到Reflection构造方法
		Constructor c1=c.getConstructor(String.class,int.class);//得到含有string参数的构造方法?用来创建对象
		c1.newInstance("Mr_Li13",21);//创建了构造方法的对象

	}
	@Test
	public void test4() throws Exception {
		//代表Reflection类的字节码对象
		Class c=Class.forName("com.dp.java.Reflection.Reflection");
		//得到Reflection构造方法
		Constructor c1=c.getDeclaredConstructor(int.class);//得到含有int参数的私有构造方法?用来创建对象
		c1.setAccessible(true);
		Reflection r=(Reflection) c1.newInstance(21);//创建了构造方法的对象
		System.out.println(r.name);//访问类成员变量

	}
	public static void main(String[] args) throws Exception {
		Reflection_test t1=new Reflection_test();
		t1.test1();
		t1.test2();
		t1.test3();
		t1.test4();
	}
}


public class Reflection {
	public String name="Mr_Li13的博客";
	public Reflection() {
		// TODO Auto-generated constructor stub
		System.out.println(getClass().getName()+"类中默认的构造方法执行!");
	}
	public Reflection(String name) {
		// TODO Auto-generated constructor stub
		System.out.println("名字:"+name);
	}
	public Reflection(String gd,int age) {
		// TODO Auto-generated constructor stub
		System.out.println("年龄: "+age+"  成绩:"+gd);
	}
	private Reflection(int gz) {
		// TODO Auto-generated constructor stub
		System.out.println("工资: "+gz);
	}
}

               



二、访问反射构造方法


public class Construction_function {
	/**
	 * 反射中的普通方法访问
	 */
	
	@Test
	public void test1() throws Exception{//未运行成功
		Class c=Reflection.class;
		Reflection R=(Reflection) c.newInstance();
		Method m=c.getMethod("m1", null);//m1方法名称,方法的可变参数
		m.invoke(R, null);
		
	}
	
	@Test
	public void test2() throws Exception{
		Class c=Reflection.class;
		Reflection R=(Reflection) c.newInstance();
		Method m=c.getMethod("m2", String.class);//m1方法名称,方法的可变参数
		m.invoke(R, "李三");
		
	}
	@Test
	public void test3() throws Exception{
		Class c=Reflection.class;
		Reflection R=(Reflection) c.newInstance();
		Method m=c.getMethod("m3", String.class,int.class);//m1方法名称,方法的可变参数
		m.invoke(R, "李三",23);
		
	}
	
	@Test
	public void test4() throws Exception{//未运行成功
		Class c=Reflection.class;
		Reflection R=(Reflection) c.newInstance();
		Method m=c.getDeclaredMethod("m4", Data.class);//m1方法名称,方法的可变参数
		m.setAccessible(true);//强暴它强制运行
		m.invoke(R,new Date());
		
	}
	
	@Test
	public void test5() throws Exception{//访问公共静态方法
		Class c=Reflection.class;
		//Reflection R=(Reflection) c.newInstance();访问静态方法就不需要这个了
		Method m=c.getMethod("m5", null);//m1方法名称,方法的可变参数
		m.invoke(null, null);
	}

	
}




public class Reflection {
	public String name="Mr_Li13的博客";
	
	
	
	/**
	 * 以下是普通方法
	 */
	private void m1() {
		// TODO Auto-generated method stub
		System.out.println("成绩:");

	}
	public void m2(String name) {
		// TODO Auto-generated method stub
		System.out.println("普通方法执行了!"+name);
	}
	public String m3(String name,int age) {
		// TODO Auto-generated method stub
		System.out.println("名字:"+name+"   年龄:"+age);
		return null;

	}
	private void m4(Data d) {
		// TODO Auto-generated method stub
		System.out.println("时间:"+d);

	}
	public static void m5() {
		// TODO Auto-generated method stub
		System.out.println("公共静态方法执行了:");

	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值