6、Java WebService --反射

1、类的加载时机
1、当程序要使用某个类时,如果该类没有加载到内存中。
2、系统会通过加载,连接,初始化来个步骤来实现对这个类进行初始化
(1)加载:就是指将class文件读入内存中,并创建一个class对象,任何类被使用时系统都会创建一个class对象。
(2)连接:验证 是否有正确的内部结构,并与其他类协调一致;准备 负责为类的静态成员分配内存,并设置默认初始值。
(3)初始化 初始化成员变量等。

3、加载时机
1、创建类的实例
2、访问类的静态变量,或者为静态变量赋值
3、调用类的静态方法
4、初始化某个类的子类
5、使用反射方式来创建某个类或者接口对应的java.lang.Class对象

2、类加载器
1、设么是类加载器 classLOader
(1)负责将.class文件加载到内存中,并为之生成对应的Class对象。
(2)虽然我们不需要关心类的加载机制,但是了解这个机制能够更好的理解程序的运行。
2、类加载器分类
(1)根加载器:也被称为引导类加载器,负责Java的核心类加载,比如:System,String等。在JDK的JRE目录下rt.jar文件中
(2)扩展类加载器:负责JRE的扩展目录jar包的加载,在JDK中的JRE下的lib文件下ext目录
(3)系统类加载:负责在jvm启动时加载java命令的class文件以及classpath环境变量所指定的jar包和类路径

3、什么是反射
1、创建一个对象的三个阶段:(1)源文件阶段 .java文件;(2)字节码阶段 .class;(3)创建对象阶段 new 对象名称
2、内省:
在运行时能够获取javaBean当中的属性名称和get与set方法
3、反射
1、Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的属性和方法。
2、对于任意一个对象,都能够调用它的任意一个方法和属性。
3、这种动态获取信息以及动态调用对象的放大的功能称为java语言的反射机制。
4、要想使用反射就要获取字节码文件:
(1)Object类的getClass()方法:判断两个对象是否是同一个字节码文件
(2)静态属性class:当做静态方法的锁对象
(3)Class类中静态方法forName():读取配置文件
(4)在这里插入图片描述4、通过字节码创建对象
1、通过无参构造创建对象
(1)获取字节码
(2)调用字节码的newInstance()方法
在这里插入图片描述2、通过有参构造创建对象
(1)获取字节码构造器clazz.getCOnstructor(type.class)
因为反射阶段操作的都是字节码,不知道具体的类型,只有在创建对象的时候才给实际参数
(2)通过构造器创建对象
调用构造器的newInstance()方法并传入参数
在这里插入图片描述5、获取字段
1.获取公共的字段
在这里插入图片描述
2.获取私有的字段
在这里插入图片描述
6、获取方法
在这里插入图片描述

7、越过数组泛型检测
数组如果定义好了泛型就不能添加泛型以外的类型
可以通过反射来去实现添加以外的类型
在一个Integer泛型的数组当中添加字符串类型
实现代码
在这里插入图片描述

8、Servlet创建过程
在这里插入图片描述

发布了66 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zlk4524718/article/details/94733494
今日推荐