反射

1.反射
   1.1 什么是反射:反射是对象的反向处理,即根据对象倒推类的组成。   

   1.2 反射的核心处理在于处理object方法:通过调用getClass()获取类的class对象

   1.3 class对象的三种实例化方式:
       任何一个类的class对象由JVM加载后产生。在同一个类加载器中,class类实例化出来的对象有且仅有一个;用户只能调用指定方法来调取该对象
    1).任何类的对象都可以通过调用object类提供的getClass()方法获取该类的class对象。
        date.getclass()
    2).“类名称.class”可以直接根据某个具体的类(类名称)来获取class对象
        java.util.Date.class
    3).调用class类的静态方法class.forName(String className)传入类的全名称来获取其class对象
        class.forName(java.util.Date)
    类加载时就产生了类的class对象用来描述对象。
    
   1.4 反射的应用:取得一个类的class对象后,可以通过反射来实例化对象
    1)在class中有如下方法:
        classz.newInstance(),实际上调用的是类中的无参构造,并且无参构造必须是public修饰的
            会抛出InstantiationException,  IllegalAccessException
        eg:Class<Date> class = (Class<Date>)Class.forName("java.util.Date");
           Date date = class.newInstance();

2.反射与类操作
    1).通过反射取得父类、父接口的信息
        (1)取得类的包的名称:
            public Package getPackage();
            获取具体的名称:
            public Package getPackage().getName();
        (2)取得父类的class对象(父类单继承)
            public native Class<? super T> getSuperClass();
        (3)取得实现的父接口([] -- 接口多继承)
            public Class<?>[] getInterfaces();
        
        Class<?> classz = Date.class;
        //获取父类信息
        System.out.println(classz.getSuperClass.getName());
        //获取父接口
        Class<?>[] cl = classz.getInterfaces();
        for(Class c : cl){
            System.out.println(cl.getName());
        }
        (4)基本数据类型在反射中也有class存在,产生的对象还是基本数据类型。
        Intger 反射回来的结果是Java.lang.Intger

    2).反射调用类中的构造方法--constructor(描述类中的构造方法)
        (1)取得类中的指定参数的构造
            public Constructor<T> getConstructor(构造方法的参数的类型.class),只能取得类中public权限的构造方法
            public Constructor<T> getDeclareConstructor(...),可以取得类中的全部构造方法,包含私有的方法
        (2)获取类中所有的构造方法
            public Constructor<T>[] getConstructors() throws SecurityException
            public Constructor<T>[] getDeclareConstructors throws SecurityException
         
            constructor类提供了实例化对象的方法:
            public void newInstance(Object ... initargs):可以调用类的其他构造,包括无参构造
    3).反射调用类中的普通方法 - Method(描述类中的普通方法)
        (1)取得类中的指定名称的普通方法
            public Method getMethod(String name(方法的名称), Class<?> ... parameterTypes(参数类型,普通方法可能有重载))       
            public Method getDeclareMethods(String name, Class<?> ... parameterTypes)
        (2)取得类中的所有普通方法
            public Method[] getMethods() throws SecurityException。该方法取得本类及父类中所有的普通方法
            public Method[] getDeclareMethods() throws SecurityException。该方法只能取得本类中的全部普通方法,包含私有方法。   
            Method提供类中调用类中的普通方法的API
                      public Object invoke(Object obj(具体的某个对象), Object ..(可变参数))

    5).描述类的普通属性
        set(Object obj, Object value(属性值))
        get(Object obj)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值