java note 10 反射

目录

反编译Field

反编译Method

反编译Constructor

反编译父类和父接口


学习代码
https://github.com/starrQWQ/java_code/tree/master/javaSE基础

反射(reflect)是三大框架的基础,它要用到:
java.lang.Class<T>

以及java.lang.reflect子包的几个重点类:

  •     Constructor
  •     Field
  •     Method
  •     Modifier修饰符

它们代表类的元素

反射作用:

  •     反编译
  •     访问java对象的Constructor,Field,Method。

获取class类型对象的3种方式:

  1.      Class.forName()
  2.     类名.class
  3.     Object引用.getClass()


forName()会把类装载到虚拟机里
类名.class不会


获取Class类型对象后,可以创建该类型对象。

T newInstance()调用无参数构造方法。
所以想使用该方法必须有无参数构造方法。

关于可变长参数:
只能出现一次且出现在形参的最后一个。
m1(int a,int... b){}


关于 IO、Properties和reflect
3步:
    创建属性对象
    创建流
    load()

配置文件使程序更加灵活
像dbinfo这样的配置文件又叫属性文件,一般后缀".properties"
中文要用unicode存储

key和value可以用“ ”“:”“=”连接

 

 

反编译Field

Class引用.getFields()获取public修饰的属性
Class引用.getDeclaredFields()获取所有属性

getModifiers()
getType()
getName() & getSimpleName()


属性靠名字区分


Field    getDeclaredField(String name)获取某个特定属性
然后就可以修改这个值
 void    set(Object obj, Object value)


对于私有属性
Field父类:java.lang.reflect.AccessibleObject
void    setAccessible(boolean flag)
打破封装访问,但不安全。


反编译Method

和Field的区别在于获取某个特定的方法
Method    getDeclaredMethod(String name, Class<?>... parameterTypes)
Object    Method引用.invoke(Object obj, Object... args)

反编译Constructor

区别也在于获取某个特定的方法
Constructor有一个创建方法
T    newInstance(Object... initargs)


反编译父类和父接口

Class<?>[]    getInterfaces()
Class<? super T>    getSuperclass()


反射缺点:
打破封装
效率低(相对 new)

反射相当于一种解释操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值