反射

1. 类对象,就是用于描述这种类,都有什么属性,什么方法的

2. 获取类对象

import charactor.Hero;
 
String className = "charactor.Hero";
    //Class.forName(全限定类名)
    Class pClass1=Class.forName(className);
    
    //类名.class
    Class pClass2=Hero.class;
    
    //new 类名().getClass();
    Class pClass3=new Hero().getClass();

tip:通常一个JVM下,只会有一个ClassLoader,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的

无论什么途径获取类对象,都会导致静态属性被初始化,而且只会执行一次

3.反射
反射机制:反射一个类拥有的方法和属性

1.反射对象:会先拿到某个类的“类对象”,然后newInstance()

Role h2= (Role) Class.forName(“com.cwz.Role”).newInstance();

2.反射属性:会先拿到某个类的“类对象”,然后getDeclaredField()

Hero h =new Hero();
Field f1= h.getClass().getDeclaredField(“name”);

tip:getField和getDeclaredField的区别

  • getField 只能获取public的,包括从父类继承来的字段。
  • getDeclaredField可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。 (注:这里只能获取到private的字段,但并不能访问该private字段的值,除非加上setAccessible(true))
  1. 反射方法:会先拿到某个类的“类对象”,然后getMethod(“方法名”, 方法类型.class)

Hero h = new Hero();
Method m = h.getClass().getMethod(“setName”, String.class);
// 对h对象,调用这个方法
m.invoke(h, “盖伦”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值