首页 > 其他 > 详细

78 反射

时间:2020-01-03 15:23:37      阅读:79      评论:0      收藏:0      [点我收藏+]

反射的概念

当程序运行时,程序中的每一个类都会被加载到堆内存中。生成且尽每个类仅生成一个Class对象。这个对象保存了整个类的结构信息,包括这个类的所有属性与方法甚至注解。就像一面镜子一样。所以我们称之为反射。

当我们说反射时,说的就是Class类。

每个类对应一个Class对象

java.lang.Class类保存了每一类的唯一一个对象。如下,当我们使用Class.forName()创建两个Class引用时,它们指向同一个对象。

每一个类包括基础数据类型的八大类及String、各基础数据类型对应的数组,枚举、接口、甚至Annotation注解。

public class Test {
	public static void main(String[] args) throws ClassNotFoundException {
		String path = "_20200103_reflection.Test";
		Class c1 = Class.forName(path);
		Class c2 = Class.forName(path);
		System.out.println(c1.hashCode());
		System.out.println(c2.hashCode());
	}
}

//运行结果
705927765
705927765

 

获取Class对象的三种方式

public class Demo01 {
	public static void main(String[] args) throws ClassNotFoundException {
		String path = "_20200103_reflection.User";
		User u = new User();
		//获取Class对象的三种方式:
		//1.Class.forName(包名.类名)
		Class<?> c1 = Class.forName(path);
		//2.已知类,直接:类.class
		Class<?> c2 = _20200103_reflection.User.class;
		//3.已知实例。实例.getClass()
		Class<?> c3 = u.getClass();
		System.out.println(c1);
		System.out.println(c2);
		System.out.println(c3);
	}
}
//运行结果

class _20200103_reflection.User
class _20200103_reflection.User
class _20200103_reflection.User

  

反射的常用方法

getName() //获取全路径类名

getSimpleName() //获取类名

78 反射

原文:https://www.cnblogs.com/Scorpicat/p/12145061.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!