今天我们来讲讲java反射的概念,我们要先知道反射是什么它是个什么东西。在我们敲代码的过程中我们一般都是先得到对象然后在对它的方法和变量进行操作。但反射却是先得到方法或者变量然后在创建对象进行操作,说白了就是反这来。这里我们给大家讲的是反射的一个基本概念,是对反射一个最最基本都认识。反射是学习框架的基础在未来的发展中有一定的帮助。
接下来就是我们如何去实现反射。
这里我要讲一个反射的核心代码也是实现反射的第一步——获取Class对象,这里我会先写一个Student类来进行一个事例。
获取Class对象它有三种写的方式:
大家可能有疑问Class类是什么,为什么要这样子定义,我在这里给大家简单的讲解一下,因为太深入了解我也不太会。
我们要知道我们写的一个java代码它是在一个.java文件里面的,我们运行这个代码的时候java的虚拟机会对它进行编译产生.class文件然后在计算机中运行。我们要知道计算机只能识别二进制数,但我们在idea里面把这个.class文件打开会看见它其实跟我们所编写的代码基本一模一样,这是因为idea把它编译了并不是它真正的样子。这段话我是只是给大家了解一下java代码的一个运行过程,这里面非常重要的就是.class文件,它包含了我们所编写的全部内容,所以我们才对class进行定义获取它,这也是就是为什么它是反射的核心代码,因为我们接下来的操作基本都需要这个class文件。这里要说明一下,在定义Class类对象的过程中并没有使用new,因为我们所获取到的是这个类的本身,并不是定义一个对象然后指向它,如果有不理解我们可以这样子了解,我们所定义的这个类对象(Class c=类名.class)它得到的是整个文件里面的所有东西,所以叫它的本身。我们平常在idea里面定义的类的对象:类名 a = new 构造器,只是一个指向这个类的一个箭头。
我们都知道一个类它包含了构造器、方法和对象,我们接下来就是对构造器、方法和对象进行操作。
在Class这个类里面有关于对构造器、方法和对象的一个操作的方法它们的关键字分别为:Constructor(构造器)、Field(变量)、Method(方法),当然这三个关键字也是有类的就跟它们的名字一样。我在API里面给大家截个图:
我们要知道反射的存在打破了java的一个封闭性,比如我们已经定义好了一个私有的一个变量,但在反射中我们可以打破这个私有的规则直接取值和赋值。



