第六章 反射机制

Java高级特性

第六章 反射机制

一、认识反射

1、反射机制

(1)Java的反射机制是Java的特性之一,反射机制是构建框架技术的基础所在。
(2)Java反射机制是指在运行状态中,动态获取信息以及动态调用对象方法的功能。
(3)Java反射有3个动态性质:

  • 运行时生成动态实例;
  • 运行期间调用方法;
  • 运行时更改属性。
2、回顾Java程序的执行过程

在这里插入图片描述

3、反射执行过程

Java反射机制在编译时并不确定是哪个类被加载了,而是在程序运行时菜价在、探知、使用。
在这里插入图片描述
Java反射机制能够知道类的基本结构,这种对Java类结构探知的能力,称为Java类的“自审”。使用Eclipse时,java代码的自动提示功能就是利用了Java反射的原理,是对所创建的对象的探知和自审。

4、通过Java反射,可以实现以下功能

(1)在运行时判断任意一个对象所属的类;
(2)在运行时构造任意一个类的对象;
(3)在运行时判断任意一个类所具有的方法和属性;
(4)在运行时调用任意一个对象的方法。

二、Java反射常用API

1、使用Java反射技术常用的类

(1)Class类:反射的核心类,反射所有的操作都是围绕该类来生成的。通过Class类,可以获取类的属性、方法等内容信息。
(2)Field类:表示类的属性,可以获取和设置类中属性的值。
(3)Method类:表示类的方法,可以用来获取类中方法的信息,胡或者执行方法。
(4)Constructor类:表示类的构造方法。

2、在Java程序中使用反射的基本步骤

(1)导入java.lang.reflect.*。
(2)获得需要操作的类的java.lang.Class对象。
(3)调用Class的方法获取Field、Method等对象。
(4)使用反射API进行操作。

三、反射的应用

1、获取类的信息

(1)获取Class对象
方式一:直接通过对应普通类的 class 属性获得

		Class userClass1 = User.class;

方式二:通过普通类对象的 getClass() 获得

		User user = new User();
		Class userClass = user.getClass()

(2)从Class对象获取信息

  • 访问Class对应类所包含的构造方法
    在这里插入图片描述
  • 访问Class对应的类所包含的方法
    在这里插入图片描述
  • 访问Class对应的类所包含的属性
    在这里插入图片描述
  • 访问Class对应的类的其他信息
    在这里插入图片描述
2、创建对象

获得 User 类型的 Class 对象

		Class<User> userClass = User.class;

方式一: 通过反射机制获得无参数构造方法

		Constructor<User> constructor = userClass.getDeclaredConstructor();

方式二:借助于 Constructor 创建对象

		User user = constructor.newInstance();
3、访问类的属性

在这里插入图片描述

4、访问类的方法

在Method类中包含一个invoke()方法,方法定义如下:

Object  invoke(Object obj,Object args)

四、反射机制的使用

虽然反射机制代码在正常项目中极少出现, 但是以下代码则可以将位于 src 内的文件变为输入流,会被经常使用到。
在这里插入图片描述

public static void main(String[] args) throws Exception {
		InputStream in = MessageDemo.class.getClassLoader().getResourceAsStream(
				"cn/ekgc/javasenior/day20210916/message.txt");
		InputStreamReader isr = new InputStreamReader(in);
		BufferedReader br = new BufferedReader(isr);
		// 开始读取该文件
		String message;
		while ((message = br.readLine()) != null) {
			System.out.println(message);
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值