java小白

一、概念

       反射是框架设计的灵魂,只有学好了反射,才能设计好的框架。关键字是Reflection,反射非常强大,它可以在运行时,获取一个类的所有属性和方法,包括类的私有属性。这种动态获取信息以及动态调用对象方法的功能就是java语言的反射机制。

       反射的常用对象:

        1.Class:Class类的实例表示正在运行的Java应用程序中的类和接口.

        2.Constructor:关于类的单个构造方法的信息以及对它的访问权限.

        3.Field :提供有关类或接口的单个字段的信息,以及对它的动态访问权限.

        4.Method :提供关于类或接口上单独某个方法的信息.

二、反射用到的API

       1.Java中java.lang.Class类用于表示一个类的字节码(.class)文件,获取字节码文件的方法:

          a)已知类和对象的情况下 类名.class 对象.getClass()

          b)未知类和对象的情况下 Class.forName(“包名.类名”)

       2.常用方法:

          a)获取包名 类名

              clazz.getPackage().getName()//包名

              clazz.getSimpleName()//类名

              clazz.getName()//完整类名

         b)获取成员变量定义信息

              getFields()//获取所有公开的成员变量,包括继承变量

              getDeclaredFields()//获取本类定义的成员变量,包括私有,但不包括继承的变量

              getField(变量名)

              getDeclaredField(变量名)

        c)获取构造方法定义信息

              getConstructor(参数类型列表)//获取公开的构造方法

              getConstructors()//获取所有的公开的构造方法

              getDeclaredConstructors()//获取所有的构造方法,包括私有

              getDeclaredConstructor(int.class,String.class)

         d)获取方法定义信息

              getMethods()//获取所有可见的方法,包括继承的方法

              getMethod(方法名,参数类型列表)

              getDeclaredMethods()//获取本类定义的的方法,包括私有,不包括继承的方法

              getDeclaredMethod(方法名,int.class,String.class)

         e)反射新建实例

              clazz.newInstance();//执行无参构造创建对象

             clazz.newInstance(666,”海绵宝宝”);//执行含参构造创建对象

             clazz.getConstructor(int.class,String.class)//获取构造方法

         f)反射调用成员变量

             clazz.getDeclaredField(变量名);//获取变量

            clazz.setAccessible(true);//使私有成员允许访问

            f.set(实例,值);//为指定实例的变量赋值,静态变量,第一参数给null

            f.get(实例);//访问指定实例变量的值,静态变量,第一参数给null

       g)反射调用成员方法

            Method m = Clazz.getDeclaredMethod(方法名,参数类型列表);

           m.setAccessible(true);//使私有方法允许被调用

           m.invoke(实例,参数数据);//让指定实例来执行该方法

三、其他

         1.单元测试方法:是java测试的最小单位,使用灵活,推荐使用,通常在没有返回值,没有参数,公共的方法前面加@Test 语法要求: @Test + void + 没有参数 + public

        2.获取字节码文件之后,将其储存在Class类型的一个泛型里面,例如:Class student2 = Student.class;

        3.暴力反射:关键字是:Declared,可以获取字节码文件的私有属性或者私有方法,和反射的方法类似,就是在方法中间加Declared,一般获取属性和方法之后,都需要赋予权利才可以使用,方法为:field.setAccessible(true);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值