反射

1.何为反射:

  JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

简单来讲:反向解析(获取信息)

区分:

  正向封装:将数据装到类里

反射的加载原理图:

 文字描述:

  在Java 程序中,JVM 加载完一个类后,在内存中就会产生该类的一个 Class 对象,一个类在堆内存中最多只会有一个 Class 对象,这个Class 对象包含了该类的完整结构信息,我们通过这个 Class 对象便可以得到该类的完整结构信息。

2.反射的功能:

前提: 运行时进行!!!!!!!!!!!

动态解析类的结构(访问装载到JVM中的类的内部信息):

            1.类

               2.属性

               3.构造器

               4.方法

解释何为动态

     在运行时代码可以根据某些条件改变自身结构,java不是动态语言,但可以利用反射机制来实现。

 

3.反射的运用:

背景:

说明:

     "Class<Student>"表示一个类型为"Student"的类的实例,可以通过这个实例来获取和操作该类的信息,比如类的方法、字段和注解等。

      "Student.class"表示"Student"类的运行时类对象,可以使用该对象获取类的信息,比如类的名称、修饰符、父类、接口等。

      关联:

             Class<Student>与Student.class是等价的关系,它们都表示Student类的类类型,可以用于进行反射操作,并具有相同的功能和效果。

 

三个途径:

        1.在已知类源码情况下:

                             Class<Student> stuClass=Student.class;

        2.只知道类字节码情况下:

                   Class<?> aClass = Class.forName("Student类的路径");

        3.在已存在对象的情况下:

                   Student stu = new Student("胡桃", 16, "女", 12.6f);

 获取类信息:

                  获取类名:

                            String name = stuClass.getName();

                  获取访问修饰符:

                             int mod = stuClass.getModifiers();

                             其中:返回值为int类型,1代表了public类型

 

获取属性信息:

 只能看到自己及父类中的【可见】属性:Field[] fields = stuClass.getFields();

 

 只能看到当前类的【所有】属性:Field[] declaredFields = stuClass.getDeclaredFields();

获取构造器的信息:

   无参构造:

 

有参构造,类中要有toString:

获取方法的信息:

 

 

posted @ 2023-08-03 14:55  Nakano_Miku  阅读(17)  评论(0)    收藏  举报
返回顶端