反射的简单理解

Java代码经历的三个阶段:

 

反射

1、概念:将类的各个组成部分封装为其他对象,这就是反射机制。

2、好处:

(1)、可以在程序运行过程中操作这些对象。

(2)、可以解耦,提高程序的扩展性

3、获取Class对象的方式

(1)、class.forName("全类名"):将字节码文件加载进内存返回class对象 ---> 多用于配置文件,将类名可以定制配置文 件中,读取文件,加载类

(2)、类名.class:通过类名的属性class获取 ----> 多用于参数的传递

(3)、对象.getClass() :getClass()方法在Object类中定义着。 ---->多用于对象获取字节码的方式

4、结论:

同一个字节码文件(*.class),再一次程序运行过程中,只会被加载一次,无论是哪种方式获取的class对象都是同一个。

5、Class的功能

(1)、获取功能

    • Field[]getFields()获取所有public修饰的成员变量
      FieldgetField(String name)获取指定的public修饰的成员变量
      Field[]getDeclaredFields()获取所有的成员变量
      FieldgetDeclaredField(String name)获取指定的成员变量

    Field成员变量:
    1、获取值:  Object get(Object obj);
    ​
    2、设置值:void set(Object obj, Object value);
    ​
    3、当通过反射给成员变量赋值的时候,若成员变量为private修饰的,需要设置下方的方法:
        field.setAccessible(true); 暴力反射  ---> 忽略访问权限修饰符的安全检查

(2)、获取构造方法(Constructor)

 创建对象:
  T newInstance(Object... initargs)
  如果构造使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance()方法

(3)、获取成员方法(Method)

方法和(1)雷同

getMethod()获取所有的方法时候可能会有一些隐藏的方法,例如Object的一些方法。

执行方法
Object invoke(Object obj, Object... args)    在具有指定参数的 方法对象上调用此 方法对象表示的底层方法。
方法.invoke(对象 , 实际参数)
​
获取方法名:
方法.getName();

(4)、获取类名

Class class=对象.getClass();

class.getName();   全类名

6、案例学习

properties 对象通过load()方法加载文件,装换成一个集合。
​
获取文件class目录下的配置文件的方式:
​
通过类加载器获取:类名.class.getClassLoader();  --->可以找到类下的class文件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值