• 反射


    Class

    类是对象,类是java.lang.Class类的实例对象

    任何一个类都是Class的实例对象,这个实例对象有三种表示方式

    Foo foo=new Foo();

    1) 实际告诉我们任何一个类都有一个隐含的静态成员变量class

    Class class1=Foo.class;(由类名来生成类的类类型)

    2) 已经知道该类的对象通过getClass方法

    Class class2=foo.getClass();(由已知对象的getClass方法来生成类类型)

    官网class1,class2表示了Foo类的类类型(class type)

    万事万物皆对象

    类也是对象,Class类的实例对象

    这个对象我们称为该类的类类型

    不管class1,class2都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象

    3)

    Class class3=null;
    
    try {
    
    class3=Class.forName("com.tanlei.cn.Foo");(由类的路径来生成类的类类型)
    
    } catch (ClassNotFoundException e) {
    
    // TODO Auto-generated catch block
    
    e.printStackTrace();
    
    }

    我们完全可以通过类的类类型创建该类的对象实例

    通过class1,class2,class3创建Foo的实例

    try {
    
    Foo foo=(Foo) class1.newInstance();//需要有无参数的构造方法
    
    } catch (InstantiationException e) {
    
    // TODO Auto-generated catch block
    
    e.printStackTrace();
    
    } catch (IllegalAccessException e) {
    
    // TODO Auto-generated catch block
    
    e.printStackTrace();
    
    }

    New 创建对象 是静态加载类,在编译时刻就需要加载所有的可能使用到的类

    通过动态加载类可以解决该问题

    成员变量的反射

    成员变量也是对象

    java.lang.reflect.Field

    Field类封装了关于成员变量的操作

    getFields()方法获取的是所有的public的成员变量的信息
    getDeclaredFields获取的是该类自己声明的成员变量

    得到成员变量的类类型getType()

    构造函数的反射

    java.lang.reflect.Constructor中封装了构造函数的信息

    getConstructor获取所有public的函数
    getDeclaredConstructor得到所有的构造函数

    方法的反射操作

    获取方法 名称和参数列表来决定

    getMethod 获取的是public的方法
    getDelcaredMethod自己声明的方法

    方法的反射操作:用对象来进行方法调用 invoke()方法 方法没有返回值返回null,有返回的返回值返回具体的返回值

    通过反射了解泛型的本质

    集合的泛型是去泛型化的

    Java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译无效

  • 相关阅读:
    PAT1134:Vertex Cover
    PAT1107:Sum of Number Segments
    PAT1009:Product of Polynomials
    力扣练习003---先序遍历构造二叉树(1008)
    力扣练习002---设计循环队列(622)
    力扣练习001---基本计算器(224)
    基础算法 --- 前缀和与差分
    数据结构 --- 二叉树
    基础算法 --- DFS(深度优先搜索)
    基础算法 --- BFS(广度优先搜索/宽度优先搜索)
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/9565846.html
Copyright © 2020-2023  润新知