java求职学习day17
反射机制
1 基本概念
1.1问题1:那什么叫动态啊?什么叫反射?
2 Class类
那么刚刚呢,我们提到了反射机制啊,就是一种动态编程的机制。对不对?好了,那我们要想实现动态编程,那就得编写通用的代码,而要想实现通用的代码,我们就得需要借助一个类叫Class类。
注意哦,
这个类的类名非常特别,因为我们以前定义类的关键字呢,也叫class。只不过呢这个Class的首字母是大写。
那这个类的话呢?我们说它的类名啊,竟然起的如此的独特,那说明这个类跟我们以前所学的那些类,应该都是怎么办?与众不同的对吧?
2.1 基本概念
以前我们学的那些JAVA官方的类也好,包括我们自己写的类也好,我们说。这些类的实例本质上是不是就是在堆区中的一块内存区域而已?对吗?哎,仅仅是在啊堆区中的一块内存区域而已。
但是呢,这个Class这个类比较独特,独特的地方就在于它的对象不再单纯,是指内存空间堆区中的一块内存区了,而它有一个特殊的含义,就是这个类的对象不再是以前我们讲的那些类的对象了,而是代表一种数据类型。
更严格的说法是这个类的对象实际上就是加载到内存中的一个运行时类。注意哦哎,以前的对象就是对象,但是这个类比较特殊,这个类的对象代表的是一个类,那说明类是不是也是一种比较特殊的对象。是不是有点颠覆以前的面向对象的概念。
所以总结下来Class这个类跟以前我们讲的类不一样的地方在于这个类的对象,它不再是堆区中的一块儿内存空间了,而是代表的是加载到方法区时的正在运行的这个类
2.2 获取Class对象的方式



包装类里面实际上都给大家写了一个叫type的常量,我们说它的作用就是获取class对象的,但是呢,当时呢,只是提了一下,实际上就是为这儿做一个铺垫。

来自java.lang-->然后找Class类--->cclass类里面是不是得要获取这个class这个类加载器的这么一个方法呀,找一下叫做什么来着?叫做getClassLoader---->
那返回的是不是一个class loader类型的?而class loader这个类里面的话,那如何?再去获取它的一个什么来着呢?那就是再加载一个类呢?这儿是不是有一个叫load class,然后参数的话呢?是不是给一个叫name?然后是不是就会返回一个class对象。
2.3 常用的方法(掌握)
给大家介绍完获取Class对象的方式之后,那实际上我们现在用这五种方式中的任意一种。是不是都可以得到Class类的一个对象,对吧?或者说一个Class类的引用,那有了这个引用之后,我们能做什么事儿呢?可以调用这个类中的方法。

但是这种方式有它的优势啊,什么优势呢?动态的创建对象。啥意思啊?就是在编译阶段,我可以不确定我创建什么样的对象,是不是到运行阶段我再确定。
为什么说这种方式比较low啊,因为你想想这还得让用户自己出,用户哪懂代码啊,对不对?或者说我们后续的话呢,从键盘输入是不是这也不太好控制啊?你说那怎么办?以后开发中怎么做的?以后开发中我们采用的策略是?这样一个策略叫做读取配置文件。
3 Constructor类
3.1 基本概念
3.2 Class类的常用方法

3.3 Constructor类的常用方法

4 Field类
4.1 基本概念
4.2 Class类的常用方法

4.3 Field类的常用方法

5 Method类
5.1 基本概念
5.2 Class类的常用方法

5.3 Method类的常用方法

6 获取其它结构信息
