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("公共静态方法执行了:");

	}

}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Java反射机制是指在运行状态,对于任意一个类,都能够知道这个类的所有属性和方法,以及对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息和动态调用对象方法的功能称为Java语言的反射机制。\[1\] Java属于先编译再运行的语言,程序对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。\[2\] 反射机制原理是通过Java的Class类来实现的。当一个类被加载到内存时,可以认为它是一个对象,是java.lang.Class的对象。通过Class类的方法,可以获取类的属性、方法等信息,并且可以通过反射机制动态地创建对象和调用方法。\[3\] #### 引用[.reference_title] - *1* *3* [JAVA反射机制原理](https://blog.csdn.net/qq_37126357/article/details/101542688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java反射机制原理](https://blog.csdn.net/qq_44159028/article/details/116119561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值