JavaSE基础之反射

->理解 Class 类
->理解 Java 的类加载机制
->学会使用 ClassLoader 进行类加载
->理解反射的机制
->掌握 Constructor、Method、Field 类的用法

->理解并掌握动态代理 

反射概述

Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的內部信息,并能直接操作任意对象的内部属性及方法。

Java反射机制主要提供了以下功能:

  • 在运行时构造任意一个类的对象
  • 在运行时获取任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法(属性)
  • 生成动态代理

Class 类

对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。
Class 对象只能由系统建立对象
一个类在 JVM 中只会有一个Class实例 
每个类的实例都会记得自己是由哪个 Class 实例所生成 

获取 Class 对象的方式

/**
 * 关于 Class: 
 * 1. Class 是一个类
 * 2. 对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、 某个类到底实现了哪些接口。
 * 3. 对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。 一个 Class 对象包含了特定某个类的有关信息。 
 * 4. Class对象只能由系统建立对象 
 * 5. 一个类在 JVM 中只会有一个Class实例
 * 
 * @throws ClassNotFoundException
 */
@Test
public void testClass() throws ClassNotFoundException {

	Class clazz = null;

	// *1. 得到 Class 对象
	// 1.1 直接通过 类名.class 的方式得到
	clazz = Person.class;

	// 1.2 通过对象调用 getClass() 方法来获取
	Object obj = new Person();
	clazz = obj.getClass();

	// 1.3 通过全类名的方式获取. 用的较多。
	String className = "com.zto.reflection.entity.Person";
	clazz = Class.forName(className);

	// Field[] fields = clazz.getDeclaredFields();

	System.out.println();
}

获取Class对象的一个实例

/**
 * *Class 类的 newInstance() 方法.
 * 
 * @throws ClassNotFoundException
 * @throws IllegalAccessException
 * @throws InstantiationException
 */
@Test
public void testNewInstance() throws ClassNotFoundException,
		InstantiationException, IllegalAccessException {
	String className = "com.zto.reflection.entity.Person";
	Class clazz = Class.forName(className);

	// 利用 Class 对象的 newInstance() 方法来创建类的一个对象.
	// 实际调用的是类的那个 无参数的 构造器!
	// 一般地, 一个类若声明了带参数的构造器, 也要声明一个无参数的构造器.
	Object obj = clazz.newInstance();
	System.out.println(obj);
}


ClassLoader类加载器

类装载器是用来把类(class)装载进 JVM 的。JVM 规范定义了两种类型的类装载器:启动类装载器(bootstrap)和用户自定义装载器(user-defined class loader)。
JVM在运行时会产生3个类加载器组成的初始化加载器层次结构 ,如下图所示:



//表示系统类装载器实例化自类sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$AppClassLoader@19821f


//表示系统类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值