java 反射

REF

https://juejin.im/post/5a44c0ad518825455f2f96e5

NOTE

反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法

通过反射来…

操作类

类的构造函数是java.lang.reflect.Constructor类的对象

一般是通过如下方式

Class c1 = Test.class; 这说明任何一个类都有一个隐含的静态成员变量class,这种方式是通过获取类的静态成员变量class得到的
Class c2 = test.getClass(); test是Test类的一个对象,这种方式是通过一个类的对象的getClass()方法获得的 
Class c3 = Class.forName("com.catchu.me.reflect.Test"); 这种方法是Class类调用forName方法,通过一个类的全量限定名获得

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) //  获得该类所有的构造器,不包括其父类的构造器
public Constructor<T> getConstructor(Class<?>... parameterTypes) // 获得该类所有public构造器,包括父类

// 强记: 多加一个declared 是获得更少的,仅仅有自己的那些构造器,包括private 的构造器
//            没有decalred 的就是获得自己部分的构造器(public 的) 以及 父类的public 的

操作 field

类的成员变量是java.lang.reflect.Field类的对象

		Field field = personClass.getDeclaredField("name");
        field.setAccessible(true); //因为变量name是私有的,需要在这里设置成可访问的

        Object value = field.get(person);
         System.out.println("获取的变量的值是:"+value);
//output:
获取的变量的值是:刘俊重

反射中可以通过:字段.get(对象),这也是获取对象的某个字段

操作method

类的成员方法是java.lang.reflect.Method的对象

public Method getDeclaredMethod(String name, Class<?>... parameterTypes) // 得到该类所有的方法,不包括父类的 
public Method getMethod(String name, Class<?>... parameterTypes) // 得到该类所有的public方法,包括父类的


---

//下面是测试通过反射调用函数
 //通过反射创建实例对象,默认调无参构造函数
 Person person2 = personClass.newInstance();
 //获取要调用的方法,要调用study方法,包含int和String参数,注意int和Integer在这有区别
 Method method = personClass.getMethod("study", int.class, String.class);
 Object o = method.invoke(person2, 18, "刘俊重");

===

注意此时就像上面获得某个字段的值 一样, 反过来用 ,,aka : 方法.invoke(哪个对象实例,方法参数1, 方法参数2)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值