反射机制---自己的理解

I、反射的概念

在java运行阶段,可以动态的创建对象就叫反射

以下是另外一种解释:
反射:将类的各个组成部分封装为其他对象,这就是反射机制
好处:
1. 可以在程序运行过程中,操作这些对象。
2. 可以解耦,提高程序的可扩展性。????

II、 java代码的三个阶段

java代码运行时,经历的几个阶段

III、java代码经历的过程介绍

java代码(.java)通过命令javac 编译成class(字节码)文件,再通过ClassLoader(类加载器)将字节码文件加载进内存,形成将类中的所有属性为一个数组,所有的构造方法为一个数组,所有的成员方法为一个数组的类(class)对象。然后将每个部分抽取为一个对象(问题来了,是怎么抽取的?

当new对象的时候,是需要将字节码文件加载进内存中的。那么在内存中,怎么描述这个字节码文件呢?万物皆对象,javaAPI中有一个类是class类,专门来描述这个字节码文件。

当我们创建对象的时候,是根据字节码文件创建的。所以当我们这样(Person p = new Person(); Person p2 = new Person();),再通过以上三种方式中任何一种,获得的字节码对象是同一个地址值

所有的IDEA中的调用方法的提示和代码中的new 对象都是经过上面这几个过程。

字节码文件其实是对应的一个类,而不是一个.java文件。因为在一个.java文件中可以有平级的多个类

IV、 获取字节码对象的三种方式:

第一种:object中的方法.getClass();
第二种:.class(任意数据类型都具备一个class静态属性)
第三种:Class的静态方法.forName(“类的全类名”);

注意:第三种和前两种的区别
前两种你必须明确Person类型.
后面是指定这种类型的字符串就行.这种扩展更强.我不需要知道类名.我只提供字符串,按照配置文件加载就可以了

V、字节码文件的加载时机:

1、new 一个类的时候
2、访问一个类的静态成员的时候
3、调用一个类的静态方法的时候(字节码文件只加载一次,当new第二次的时候就不再加载了;或者调用静态属性或者方法时,调用第二次时就不在加载了

这里有个问题,如果字节码文件加载进内存后,什么时候会从内存中消失???????????

4、通过反射的方式创建一个类的字节码对象的时候
5、创建一个子类对象的时候
6、java命令执行一个字节码文件的时候

玩反射就是玩字节码对象中的三个对象
构造方法对象,属性对象,方法对象

反射的字节码对象中,三大对象的API测试。代码在G:\idea\Xpp\ReflectTest

发布了59 篇原创文章 · 获赞 1 · 访问量 751

猜你喜欢

转载自blog.csdn.net/weixin_43983411/article/details/103323351