2021-08-23 Java反射 - yahya

反射机制

通过反射机制可以操作class字节码文件,可以读和修改,操作代码片段,位于java.lang.reflect.* 包下

主要类:

  • java.lang.Class 字节码文件,表示类型
  • java.lang.reflect.Method 字节码中的方法字节码
  • java.lang.reflect.Constructor 字节码中的构造方法字节码
  • java.lang.reflect.Field 字节码中的属性字节码
  1. 获取 class 的三种方式

1、Class c1 = Class.forName(“完整包名”); c1代表类这个类型;将类加载到程序中
可将包名配置到配置文件中,src为类的根目录,可获得文件的绝对路径:String path = Thread.currentThread().getContextClassLoader().getResource(“文件相对src路径”).getPath();将配置信息读取到properties集合中

2、每个类继承Object,都有getClass()方法,返回对象的类这个类型

3、java中任何类型,包括基本数据类型都有.class属性,例如
Class c = String.calss;

  1. 通过反射实例化对象

Object o = c.newInstance(); 使用方法创建实例,会调用类的无参构造方法

  1. 配置文件读取

1、通过properties集合读取

2、通过资源绑定器 java.util 中提供ResourceBundle,调用getBundle(“不带扩展名的文件路径名”)方法,只能绑定.properties文件

  1. 类加载器

专门负责加载类的命令/工具 ClassLoader

JDK 中自带三个类加载器,启动类加载器、扩展类加载器、应用类加载器

启动类加载器专门加载:jdk/jre/lib/rt.jar中的类文件
如果启动类加载不到,通过扩展类加载器加载,负责加载:jdk/jre/lib/ext/*.jar
如果前两个加载不到,则通过应用类加载器加载classpath中的jar包

双亲委派机制:安全机制,优先从启动类加载器中加载(父),再从扩展类加载器中加载(母),双亲委派。

  1. 获取Field

Class c = Class.forClass();

c.getFields() 只能反射获取public字段
c.getDeclaredFields() 可以获取所有字段,包括private

  1. 获取method

方法可变长度参数 fun(int… args)

使用 Method 类中的invoke 调用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值