Java高级学习篇之反射

  • Post author:
  • Post category:java



(一) 什么是反射?















就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;对于任意一个对象,都能调用其任意一个方法和属性。这种动态获取信息及动态调用对象方法的功能叫

Java的反射机制



说明:

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个 类只有一个Class对象),这个对象就包含了完整的类的结构信息。可以通过这个对象查看到所对应类的所有信息。

(二) 反射能做什么?

(1)在运行时判断任意一个对象所属的类

(2)在运行时构造任意一个类的对象

(3)在运行时判断任意一个类所具有的成员变量和方法

(4)在运行时获取泛型信息

(5)在运行时调用任意一个对象的成员变量和方法

(6)在运行时处理注解

(7)生成动态代理

(三) Class类

通过对象可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接 口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含 了特定某个结构(class/interface/enum/annotation/primitive type/void/[])的有关信息。

(1) Class本身也是一个类

(2) Class 对象只能由系统建立

(3) 一个加载的类在 JVM 中只会有一个Class实例

(4)一个Class对象对应的是一个加载到JVM中的一个.class文件

(5) 每个类的实例都会记得自己是由哪个 Class 实例所生成

(6)通过Class可以完整地得到一个类中的所有被加载的结构


(7)Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得         相应的



Class对象


(四) 实际应用​


I.获取Class类的实例

方式一:调用运行时类的属性

方式二:通过运行时类的对象,调用getClass()

方式三:调用Class的静态方法:formatName(String classPath)

方式四:使用类的加载器:ClassLoader

@Test
    public void test3() throws ClassNotFoundException {//获取运行时类的方式(前三种为重点)
        //方式一:调用运行时类的属性
        Class clazz = Person.class;
        System.out.println(clazz);
        //方式二: 通过运行时类的对象,调用getClass()
        Person p1 = new Person();
        Class clazz2 = p1.getClass();
        System.out.println(clazz2);
        //方式三:调用Class的静态方法:formatName(String classPath)
        Class clazz3 = Class.forName("practice.Person");
        Sy



版权声明:本文为java1527原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。