Java中的反射与现实中的反射

作为第一次发博客的枚新码农☹

Java中的反射与现实中的反射

Java中的反射是动态获取类或对象信息以及动态调用对象方法的机制。
而我们生活中的反射,就像光,含义差别好大。

— 内涵

  1. 反射 ,对于任意一个类都能获取到它的所有成员变量和成员方法;
  2. 对于任意对象,都能访问它的任意 属性方法,并能改变它的值 ;

And

  • 获取类Class对象的三种方式:
    ①通过类的forName(“全限定名”)
    ②通过对象的getClass()方法
    ③通过类的Class属性

— 反射获取类的构造方法代码举例

通过Constructor 关键字,反射获取类的构造方法。

package test01;

import java.lang.reflect.Constructor;
import java.util.Arrays;

/**
 * @作者: YD
 * @时间: 2019年9月19日
 */
public class ConstructorTest {
	
	public static void main(String[] args) throws NoSuchMethodException, SecurityException {
		
//		获取类的class对象
		Class cls = People.class;
		
//		1.获取public修饰的指定参数列表的构造方法
		Constructor con = cls.getConstructor(String.class);
		System.out.println("public修饰的有参构造:"+con);
		
//		2.获取非public修饰的指定参数列表的构造方法
		Constructor nocon = cls.getDeclaredConstructor(String.class,int.class);
		System.out.println(nocon);
		
//		3.获取所有public修饰的构造方法
		Constructor[] cons = cls.getConstructors();
		System.out.println(Arrays.toString(cons));
		
//		4.获取所有构造方法(包括非public)
		Constructor[] dcons = cls.getDeclaredConstructors();
		System.out.println(Arrays.toString(dcons));
		
		
	}
	
}

作用

关键字(Constructor)作用
getConstructor (参数列表)获取public修饰的指定参数列表的Constructor对象
getConstructors ()获取所有public修饰的Constructor对象
getDeclaredConstructor (参数列表)获取非public修饰的指定参数列表的Constructor对象
getDeclaredConstructors ()获取所有Constructor对象 (包括非public)

反射获取成员变量

关键字(Field)作用
getField (变量名)获取public修饰的指定参数列表的Field对象
getFields ()获取所有public修饰的Field对象
getDeclaredField (变量名)获取非public修饰的指定参数列表的Field对象
getDeclaredFields ()获取所有Field对象 (包括非public)

反射获取成员方法

关键字(Method)作用
getMethod (参数列表)获取public修饰的指定参数列表的Method对象
getMethods ()获取所有public修饰的Method对象
getDeclaredMethod (参数列表)获取非public修饰的指定参数列表的Method对象
getDeclaredMethods ()获取所有Method对象 (包括非public)

通过的反射创建对象的方式:

  • 通过class对象的newInstance()方法创建,(必须确保类中也有无参构造方法)
  • 通过constructor对象的newInstance(Object…args)方法创建(既可以调用无参构造,也可以调用有参构造)
  • 反射的作用动态加载
    1.在运行时判断任意一个类的数据类型
    2.在运行跟是创造任意一个类的对象
    3.在运行时获取任意一个类的成员方法和成员变量
    4.在运行是调用任意一个对象的方法

— 设计模式: 软件开发过程中共性问题的可重用解决方案

1. 外延

  • 单例模式:确保一个类智能创建一个实例的设计模式
  • 工厂模式
  • 适配器模式
    适配器:对象适配器,类适配器
  • 代理模式:以扩展目标对象功能为摸底,通过代理类对象简洁操控目标对象的设计模式
    外延:
    静态代理:由自己编写代理类,由自己创建代理对象的代理模式
    动态代理:通过反射在运行时动态创建代理对象的代理模式

以下是课堂上的总结X-mind图

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值