JAVA反射机制

JAVA反射机制

Java反射机制是Java被视为动态(或准动态)语言的一个关键性质,这个机制允许程序在运行状态中,透过Refection APIs,获取任意一个对象的内部信息:
  • modifiers修饰词如:public、static等
  • superclass 如:Object
  • interface接口的实现类 如:Cloneable
  • fields属性
  • mothod方法

java反射机制可以在程序运行时:改变field调用method加载、探知、使用编译期间完全未知的classes

动态 获取信息以及调用对象的方法的功能称为 Java语言的反射机制

总结一下:

反射就是通过名字反向获取类对象,属性,方法;

应用场景:

在事先不确定new 哪个对象,给哪个属性赋值,调哪个方法如果确定不要使用反射

反射机制提供的功能

在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判段任意一个类所具有的成员变量和方法
在运行时调用任一个对象的方法
在运行时创建新类对象:通过类对象可以反向new对象  类对象.newInstance();

通过类对象可以获取类的所有信息(属性和方法);
类是对象的模版,也就是可以通过类对象获取对象的所有信息(信息不是属性值);

注意: Class对象(类对象)

使用Java的反射功能时,基本首先都要获取类的Class对象,再通过Class对象获取其他的对象。
类对象:

.class文件会被JVM加载为Class对象(类对象)

Class也是一个类,是类对象的类型(类是对象的类型)

Class在java.lang包中,无需导包

一个.class文件对应一个类对象,所有类对象的类型都是Class

获取类对象

方法1:

Class<?> cls = Class.forName("类名");

注意:

类名:必须是全限定名:包名.类名

Class.forName:通过类名反向获取类对象

类名必须是JVM加载完毕后的,所以要进行异常处理

Class.forName("类名")如果不接收返回值,只是加载该.class文件到JVM中

方法2:

Class<X> cls = X.class;(X是一个类);   //类.class获取类对象

Class<Master> clsMaster = Master.class;

getDeclaredXXX和getXXX的区别:
带Declared是获取本类中声明的方法或属性,包括private

不带Declared是获取所有public的属性和方法,包括父类public的

getDeclaredMethod()、getMethod()

无参:(方法名)

有参:(方法名,参数类型...):Class.getMethod("setStrain",String.class)

调用:从里到外对象调用Method;

Method.invoke(对象名,参数值...);

注意: 如果调用方法有返回值,就用Object类型的引用接收返回结果;

调用父类中的private属性、方法:

Class<X> cls = X.class;
X x = null;
Class<?> superClass = cls.getSuperclass(); //获取X的父类
try{
    if(superClass == Object.class){
        System.out.out("该类没有父类");
    }
    Field superField = superClass.getDeclaredField("属性名");
    superField.setAccessible(true);
    superField.set(x, rs.getObject("属性名")); //rs.getObject()  获取对应属性名的值
} catch(NoSuchFieldEcxeption e) {
    Field childField = X.getDeclaredField("属性名");
    childField.setAccessible(true);
    childField.set(x, rs.getObject("属性名"));
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值