美文网首页
反射---Class类

反射---Class类

作者: 爱做梦的严重精神病患者 | 来源:发表于2018-10-25 23:17 被阅读0次

 能够分析类能力的程序称为反射。反射机制的功能极其强大,反射机制可以用来:

  • 在运行时分析类的能力
  • 在运行时查看对象,例如,编写一个toString方法供所有类使用
  • 实现通用的数组操作代码
  • 利用Method对象

1.Class类

 在程序运行期间Java运行时系统始终为所有的对象维护一个被称为运行时类型标识保存这些运行时信息的类被称作Class类Object类中的getClass()方法将返回一个Class类型的实例
 一个Class对象将表示一个特定的运行时各种信息。最常用的Class方法getName(),这个方法返回类的名字

Employee e = new Employee("YinHang");
System.out.println(e.getClass().getName() + " " + e.getName());
//输出 Employee YinHang

 还可以调用静态方法forName获得类名对应Class对象

String className = "java.util.Random";
Class cl = Class.forName(className);

 除此之外,如果T任意的Java类型(或void关键字),T.class将代表匹配Class类对象

Class cl1 = Random.class;
Class cl2 = int.class;
Class cl3 = Double[].class;

 一个Class对象实际上表示的是一个类型,而这个类型未必一定是一种类。例如:int不是类,但int.class是一个Class类型的对象Class类实际上是一个泛型类。例如:Employee.class类型Class<Employee>

虚拟机为每个类型管理一个Class对象。因此可以利用"=="运算符实现两个Class类对象比较的操作。(属于同一个类型)

if(e.getClass() == Employee.class)

 还有一个很有用的方法newInstance(),可以用来动态地创建一个类的实例。例如,

e.getClass().newInstance();
Class.forName("java.util.Random").newInstance();
Empolyee.class.newInstance();

 但以上Class.newInstance()方法只能调用无参数的构造器,如果要调用有参数的构造器,需要使用Constructor类中的newInstance(Object...args)方法。其中Obejct...args参数代表构造器所需要的各种参数

e.getClass().getDeclaredConstructor().newInstance(Obejct...args);

总结:

  • Class对象表示某一类型运行时的各种信息
  • 获得Class对象的三种方法:
  1. object.getClass()
  2. Class.forName()
  3. T.class
  • 两个Class对象比较使用"=="运算符即可
  • 动态地创建一个类的实例,使用Constructor类中的newInstance(Object...args)方法。

2.类的加载

Java类的加载编译器.java文件编译.class文件加载到JVM中,在内存中生成Java.lang.class对象
 之所以要加载类是因为JVM不是在项目运行时就把所有的类文件加载到JVM,而是当类需要的的时候才去加载

Class.forName()、new关键字、ClassLoader.loadClass区别

  • Class.forName()除了将类的.class文件加载到JVM中之外,还会对类进行解释执行类中的static块
  • ClassLoader只干一件事情,就是将.class文件加载到JVM中,不会执行static中的内容。
  • new关键字Class.forName.newInstance()的区别在于,new关键字可以调用带参数的构造器,而后者不能。

相关文章

  • Java 学习基础篇 ---- Java反射与泛型

    一、反射 通过Class实例获取 class 信息的方法称为反射(Reflection)。 (一) Class 类...

  • JAVA基础之反射

    1.通过反射获取类获取反射对象(反射入口):Class 1.Class.forName(全类名) 2.类名.cla...

  • 反射---Class类

     能够分析类能力的程序称为反射。反射机制的功能极其强大,反射机制可以用来: 在运行时分析类的能力 在运行时查看对象...

  • Dart基础4-反射

    mirror 1. 反射类 ClassMirror 1.1 获取反射类对象 Type 类型, 即 class类的类...

  • Java 反射实例

    反射获取 Class类的对象有三种方式:Object类中的getClass()方法类.class通过Class类的...

  • Java的反射机制

    Class简介 反射之中所有的核心操作都是通过Class类对象来展开的, 可以说Class类对象是反射操作的根源所...

  • Java高级-反射

    15.1.Java反射机制概述 15.2.理解Class类并获取Class实例(重点) 用反射实现类的实例化,调用...

  • 2020-07-04【反射】

    类加载 类加载器 反射概述 获取Class类的对象 反射获取构造方法并使用 反射获取成员遍历并使用 反射获取成员方...

  • 反射

    反射必须依赖Class类字节码文件 获取Class对象三种方式1.类名.class String.class...

  • 反射、Class类、Field类、Method类

    反射 Class类 Class类没有公共构造方法,所有创建Class的对象的方法有以下几种: 1.通过Class....

网友评论

      本文标题:反射---Class类

      本文链接:https://www.haomeiwen.com/subject/lkkhtqtx.html