zoukankan      html  css  js  c++  java
  • Class类与java反射

    1.什么是反射?

    Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;

    2.Class类对象:在类加载时创建的对象,存储在堆中,通过这个对象可以获取类的信息

    获取Class类对象的方法:

    //1、通过对象调用 getClass() 方法来获取,通常应用在:比如你传过来一个 Object
    //  类型的对象,而我不知道你具体是什么类,用这种方法
      Person p1 = new Person();
      Class c1 = p1.getClass();
            
    //2、直接通过 类名.class 的方式得到,该方法最为安全可靠,程序性能更高
    //  这说明任何一个类都有一个隐含的静态成员变量 class
      Class c2 = Person.class;
            
    //3、通过 Class 对象的 forName() 静态方法来获取,用的最多,
    //   但可能抛出 ClassNotFoundException 异常
      Class c3 = Class.forName("com.ys.reflex.Person");
    //需要注意的是:一个类在 JVM 中只会有一个 Class 实例,即我们对上面获取的 c1,c2,c3进行 equals 比较,发现都是true



    3.通过 Class 类获取成员变量、成员方法、接口、超类、构造方法等

    •   getPackage():获取该类的存放路径             Package对象
    •   getSuperclass():获取继承的类                  Class对象
    •   getInterfaces():获取接口                            Class型数组
    •       getName():获得类的完整名字。                        String对象
    •   getFields():获得类的public类型的属性。        Field型数组
    •        getFields(String name):获得类的public类型的指定属性    Field型对象
    •   getDeclaredFields():获得类的所有属性。包括private 声明的和继承类
    •   getMethods():获得类的public类型的方法。
    •   getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类
    •   getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。
    •   getConstructors():获得类的public类型的构造方法。
    •   getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。(ex:int.class)
    •   newInstance():通过类的不带参数的构造方法创建这个类的一个对象。

     4.动态操作构造器,方法,属性

    构造对象:

    1.User u= (User)clazz.newInstance()//创建对象,调用了无参构造器
    
    2.//通过构造器创建对象
    Constructor<User> c = clazz.getConstructor()
    c.newInstance(参数)//调用有参的构造器创建对象

    反射弊端:影响性能,做访问检查,可以通过setAcessable(true),然后可以直接方法私有属性及方法,不再检查

    5.操作泛型:java中的泛型是针对编译器说的,确保数据的类型安全,和免除强制类型转换的麻烦,但是一旦编译完成,泛型都会擦除,

    6.操作注解

    拓展:

    类之父:Object,所有的类不声明继承某一个类,默认都继承Object类

    Object类的常用方法:

    • euqals():比较两个对象的实际内容是否相等      ==:比较两个对象的引用,即地址是否相同
    • getClass():返回对象执行的Class实例   getClass().getname()可以获取类的名称,在一个类中可以直接使用这个方法,毕竟继承了父类,就有了这个方法
    • toString():将一个对象返回为字符串形式,会返回一个字符串实例,因为toString方法是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”,  它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法
    • Object类中的getClass,notify,notifyall,wait等方法不能被重写,因为这些方法被定义为final类型
  • 相关阅读:
    Java中的Set List HashSet互转
    Java数组如何转为List集合
    Map
    Jave中的日期
    mybatis plus 条件构造器queryWrapper学习
    Error running 'JeecgSystemApplication': Command line is too long. Shorten command line for JeecgSystemApplication or also for Spring Boot default configuration.
    RBAC权限系统分析、设计与实现
    html拼接时onclick事件传递json对象
    PostgreSQL 大小写问题 一键修改表名、字段名为小写 阅读模式
    openssl创建的自签名证书,使用自签发证书--指定使用多域名、泛域名及直接使用IP地址
  • 原文地址:https://www.cnblogs.com/zkkkk-/p/10499907.html
Copyright © 2011-2022 走看看