反射机制

反射机制

一:什么是反射机制

  1. 反射机制就是可以操作字节码文件的一种手段(class文件)
  2. 反射是通过对象获得其class对象的方法
  3. 反射机制相关的重要的类如下:
    • java.lang.Class:代表整个字节码,代表一个
    • java.lang.reflect.Method:代表字节码中的方法字节码
    • java.lang.reflect.Constructor:代表字节码中的构造方法字节码
    • java.lang.reflect.Field:代表字节码中的属性字段字节码

二:Class对象

我们对class对象操作前必须先获得其Class对象;获取一个类的Class对象有三种方式:

  1. 任何一个类都有其Class属性,直接调用类名.Class属性获取其Class对象

  2. 任何一个对象都有其==getClass()==方法,调用其方法也可以获得Class对象

  3. 静态方法==Class.forName("")==方法,传入一个对象的完整类名(包括包名)

    注意:
    	当我们调用静态方法Class.forName("")时,会导致类被加载,类一加载,那么静态代码块就执行,所以当我们希望一个类只有静态代码块被执行可以使用此方法
    
      //1.得到某个类的class对象的三种方法
        @Test
        public void test() throws ClassNotFoundException {
            Class c1 = Student.class;
            System.out.println("c1 = " + c1);                                       //1.c1 = class com.zelin.test.pojo.Student
            Class c2 = new Student().getClass();
            System.out.println("c2 = " + c2);                                      //2.c2 = class com.zelin.test.pojo.Student
            Class c3 = Class.forName("com.zelin.test.pojo.Student");
            System.out.println("c3 = " + c3);                                     //3.c3 = class com.zelin.test.pojo.Student
    
        }
    

三:Constructor构造方法

我们知道:构造方法包含权限修饰符,构造方法的参数列表

  1. 首先获取Class对象内所有的构造方法,以及其访问权限和参数列表

     //2.1) 先获取class对象
            Class c = Class.forName("com.zelin.test.pojo.Student");
    //2.8) 获取所有构造方法的数组
            Constructor[] d = c.getDeclaredConstructors();
            System.out.println(d.length);
    
            //2.8) 打印构造器信息
            for (Constructor con : d) {
                //2.8.1) 获取构造器对象名称
                String name = con.getName();
                //2.8.2) 获取对象参数类型
                String s = Modifier.toString(con.getModifiers());
               //2.8) 打印构造器信息
            for (Constructor con : d) {
                //2.8.1) 获取构造器对象名称
                String name = con.getName();
                //2.8.2) 获取对象参数类型
                String s = Modifier.toString(con.getModifiers());
    
                System.out.println(s+" "+"class "+" "+name + "(" + ")" + "{\n}");
            }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值