Junit 单元测试
讯享网Junit 是一个单元测试框架,可以代替main方法执行其他的方法
作用:可以单独测试一个方法
Junit 是第三方工具,使用需要导入Jar包
:不能修饰static的方法
:不能修饰带参数的方法
:不能修饰带返回值的方法
相关注解
讯享网

讯享网
类的加载机制
① new 对象
② new 子类对象(new 子类对象先初始化父类)
③ 执行main方法
④ 调用静态成员
⑤ 反射,创建class对象
类加载器-ClassLoader
在JVM中,负责将本地上的Class文件加载到内存的对象ClassLoader;
分类:
:根类加载器,C语音写的,我们获取不到,也称为引导类加载器,负责Java的核心类加载,比如:System,String等,jre/lib/rt.jar下的类都是核心类
:扩展类加载器,负责JRE的扩展目录中的jar包的加载,在JDK中的JRE的lib目录下的ext目录
:系统类加载器,负责JVM启动时加载来自java命令class文件(自定义类),以及classpath环境变量所指定的jar包(第三方jar包)
不同的类加载器加载不同的类
获取类加载器对象
是class对象中的方法
获取类加载器对象对应的父类加载器
ClassLoader类中的方法:ClassLoader
双亲委派机制(全盘负责委托机制)
① Person类中有一个String
② Person本身是AppClassLoader加载
③ String是BootStrapClassLoader加载
加载顺序:
Person本身是App加载,按理来说String也是App加载 java se基础大全
但是App加载String的时候,先问一问Ext:你加载String吗?
Ext说:我不加载,我负责加载的是扩展类,但是app你别着急,我去问父类 boot
Ext说:boot,你加载String吗?
boot:我加载核心类ok,我加载去了
类加载器的cache(缓存)机制(扩展):一个类加载到内存中,缓冲也会保存一份,后面如果再使用此类,如果缓存中保存了这个类,直接返回,如果没有才加载这个类,下次如果有其他类在使用的时候就不会重新加载了,直接去缓存中拿,保证在内存中的唯一性
所以:类加载器的双亲委派和缓存机制共同造就了加载类的特点,保证了类在内存中的唯一性。

反射
反射概述:解刨class对象的一个技术
获取Class对象
- 调用Object中的getClass方法
- 无论是基本类型还是引用类型,JVM都提供了一个静态成员:
- Class类中的静态方法
className:传递的是类的全限定名(包名.类名)
- pro.properties
- 常用的:
反射构造方法
获取所有public的构造方法
获取空参构造方法
Class 类中的方法:
:获取指定的public的构造
parameterTypes:可变参数,可以传递0个或者多个参数
① 如果获取的是空参构造:参数不用写
② 如果获取的是有参构造:参数写参数类型的class对象
Constructor类中的方法
T newInstance(Object… initargs):创建对象
initargs:传递的是构造方法的实参
① 如果根据无参构造new对象,initargs不用写
② 如果根据有参构造new对象,initargs传递实参
空参构造创建对象的快捷方式
Class类中的方法:
:根据空参构造创建对象
前提:被反射的类中必须有修饰的空参构造
获取有参构造方法
获取私有构造
:获取所有的构造方法,包括
:获取指定构造,包括
parameterTypes 参数类型的class对象
Constructor 有一个父类 ,里面有一个方法
:修改访问权限
flag :解除私有权限
反射成员方法
获取所有的成员方法_public
获取方法(有参、无参)_public
Class类中的方法
:获取指定的public的成员方法
:方法名
:方法参数类型的class对象
调用方法:Method对象中的方法
:执行方法
:根据构造new出来的对象
:方法实参,有参数直接传递实参,否则不用传
返回值::接受被执行方法的返回值,如果方法没有返回值,不用接受
获取私有方法
:获取所有的成员方法,包括
:获取执行成员方法,包括
name:传递方法名
:方法参数类型的class对象
:解除私有权限
反射成员变量
获取所有属性
Class类中的方法
:获取所有public的属性
:获取所有属性,包括的
获取指定属性
Class类中的方法
:获取指定public的属性
:获取指定属性,包括的
Filed类中的方法
:为属性赋值,相当于JavaBean中的set方法
:对象
:值
:获取属性值
:对象
:解除私有权限
反射练习
需求:在配置文件中,配置类的全限定名,以及配置一个方法名,通过解析配置文件,让配置好的方法执行起来
className = 包名.Person
methodName = eat
步骤:
- 创建properties配置文件,配置信息
① properties配置文件放哪里?
将来我们开发完成之后,输出的是out路径下的class文件,将class文件打包,如果将配置文件直接放到模块下,那么out路径下是不会生成这个配置文件的,如果没有配置文件,程序也就运行不起来。
解决:我们可以将配置文件放到目录下,路径下就会出现配置文件
② 将配置文件放到下,out路径下会自动生成配置文件
解决:我们可以单独创建一个文件夹,将所有的配置文件放到此目录下,将文件改成资源目录,取名- 读取配置文件,解析配置文件
① 如果配置文件放到资源目录下,怎么读取
使用 ``new FileInputStream(“模块名称 esourceproperties文件名”),这样是不可取的,out路径下没有resource目录
解决:使用类加载器
ClassLoader classLoader = 当前类.class.getClassLoader()
InputStream in = classLoader.getResourceAsStream(“文件名”):自动扫描resource下的文件,扫描out路径下的配置文件- 根据解析出来的className,创建一个Class对象
- 根据解析出来的methodName,获取对应的方法
- 执行方法
注解
- 引用数据类型:
类、数组、接口、枚举、注解- JDK 1.5 版本的新特性,一个应用数据类型,和类、接口、枚举是同一个层次
- 作用:
说明:对代码进行说明,上传doc文档(API文档)
检查:检查代码是否符合条件、
分析:对代码进行分析,起到代替配置文件的作用
注解的定义以及属性的定义格式
注解属性其本质是抽象方法;
增强注解的使用
:此属性没有默认值,需要在使用注解的时候为其赋值
:此属性有默认值,可二次赋值
注解能定义的数据类型:
① 8种基本类型
② String类型、class类型、枚举类型、注解类型
③ 以上类型的一维数组
注解的使用
使用格式:
①
②
注意:
- 空注解可以直接使用:空注解就是注解中没有任何属性
- 不同的位置可以使用一样的注解,但是同样的位置不能使用一样的注解
- 使用注解时,如果注解中有属性,注解中的属性一定要赋值,如果是多个属性,用隔开,注解中使用数组,使用
- 如果注解中的属性有默认值,可不写,
- 如果注解中只有一个属性,并且属性名叫,那么使用注解的时候,属性名不用写,可直接写值(包括单个类型和数组)
注解解析
获取到注解中的属性值
- 注解解析涉及的接口:AnnotateElement接口
实现类:AccessibleObject、Class、Constructor、Executable、Field、Method、Package、Parameter- 解析
① 先判断指定位置上有没有使用指定的注解
:判断指定位置上有没有指定的注解
:获取指定注解,返回值类型为获取的注解类型
② 获取注解中的属性值
Action注解没有被加载至内存中,annotationPresent是
元注解
元注解就是管理注解的注解
- 控制注解的使用位置
① 控制注解能否在类上使用
② 控制注解能否在构造上使用
③ 控制注解能否在方法上使用- 控制注解的生命周期(加载位置)
① 控制注解能否在源码中出现
② 控制注解能否在class文件中出现
③ 控制注解能否在内存中出现
使用:
- :控制注解的使用位置
:是一个枚举,里面的成员可以类名直接调用
ElementType成员:
:控住注解能使用在类上
:控制注解能使用在属性上
:控制注解能使用在方法上
:控制注解能使用在参数上
:控制注解能使用在构造上
:控住注解能使用在局部变量上- :控制注解的生命周期
:是一个枚举,成员可以直接类名调用
RetentionPolicy 成员:
:控制注解能在源码中出现
:控制注解能在Class文件中出现
:控制注解能在运行时出现
枚举
五大引用类型
定义:
public enum 枚举类名{}
所有的枚举类都是Enum
枚举的特点:
都是 static final,定义的时候不写,
写完所有枚举加
枚举名称
使用:类名直接调用
注意:每一个枚举都是当前枚举类对象
枚举类中的枚举值都是本类类型
在枚举类中定义的构造,默认都是的
使用场景:表示对象的状态


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/9272.html