reflect(反射)

反射:

反射的概念:其实就是将 java中所有的后缀为.class的这一类事物描述为具体的一个类,通俗:反射就是一堆class文件,Class类描述的是所有的class文件的共性。

如果我要找到一个String.class  Class类的对象(实例Instance)

class文件被描述为Class

class文件中的属性被描述为Field

class文件中的方法被描述为Method

class文件中的构造函数被描述为Constructor

Class类的对象的获取:

package com.lsh.reflect;

//javabean/实体

public class User {
	private String name;
	private int age;
	
	public User(){
		
	}

	public User(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

package com.lsh.reflect;

/*
* //通过反射获取对象的三种方式:
* 	1.类名.class属性
* 	2.new 类名().getClass()方法
* 	3.Class.forName(“包名+类名”)
* 
*/
public class ReflectDemo {
	
	public static void getClazz() throws Exception{
		//获取User类的class对象
		//第一种方式:类名.class属性
		Class clazz1 = User.class;
		//第二种方式:new 类名().getClass()方法
		Class clazz2 = new User().getClass();
		//第三种方式:Class.forName(“包名+类名”)
		Class clazz3 = Class.forName("com.lsh.reflect.User");
		
		System.out.println(clazz1 == clazz2);//ture
		System.out.println(clazz2 == clazz3);//ture
		System.out.println(clazz1 == clazz3);//ture
	}
	public static void main(String[] args) throws Exception {
		getClazz();
	}
}
输出结果为:

ture

true

true

既然可以使用三种不同的方式获取任意一个类的Class对象,那么在实际的项目开发中,到底使用哪一种呢?

由于反射主要的任务的是做框架开发,在这些已经实现的框架中完全使用的是反射技术。在一般的框架实现中都采用的是将类的完整路径配置在xml文件中,这样程序在启动的时候可以通过IO技术获取该类的全名,那么最常用的就是方式三获取该类的Class对象进行进一步在操作。

方式三:Class 变量名 = Class.forName("包名+类名");

总结:其实反射就是将class文件中的不同的部分都封装为具体的对象,进而便于操作。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值