十九、JAVA高级
1. 单元测试
针对最小的功能单元(方法),编写测试代码对其进行正确性测试。
main方法进行单元测试的问题:
- 只能在main里面调用别的方法进行测试
- 无法自动化测试,一个方法失败会影响其他方法的测试
- 无法获得测试报告,需要程序员自己去观察测试是否成功
Junit单元测试框架
- 第三方公司开源,开发工具已集成
- 一键自动化测试
- 生成测试报告
Junit使用步骤
- 导入Junit的jar包到项目(IDEA已集成)
- 为业务类中的业务方法定义对应的测试方法(公有、无参、无返回值)
- 必须加@Test,加了在之后才可测试运行
- 开始测试,绿色通过,红色有错
自动化测试
在项目上右键Run All Test
案例
工具类
讯享网测试类
讯享网
Junit框架的常见注解
在测试方法之前执行的方法——初始化资源
在测试方法之后执行的方法——释放资源
测试类
2. 反射
学习框架、理解源码/开发框架
java.lang.reflect
概念: 加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)——反序列化/向外界展示已经封装好的内部东西
学什么: 如何获取类的信息并操作他们
步骤:
- 加载类,获取类的字节码:Class对象
- 获取类的构造器:Constructor对象
- 获取类的成员变量:Field对象
- 获取类的成员方法:Method对象
1)获取Class对象的三种方式
- Class c1 = 类名.class
- 调用Class提供的方法:public static Class forName(String package);
- Object提供的方法:public Class getClass(); Class c3 = 对象.getClass();
讯享网
2)获取Constructor对象
类
获取Constructor对象
作用:
初始化对象返回
3)获取成员变量Field
学java框架基础
public Field[] getFields()——获取全部public修饰的成员变量
public Field[] getDeclaredFields()——获取全部成员变量
public Field getField(String name)——根据成员变量的名字,获取某个成员变量,只能获取public修饰的
public Field getDeclaredField(String name)——根据成员变量的名字,获取某个成员变量
作用: 赋值、取值

void set(Object obj, Object value);
Object get(Object obj);
public void setAccessible(boolean flag); // 禁止访问权限
4)获取成员方法Method
同上
作用:执行
public Object invoke(Object obj, Object……args); // 出发某个对象的该方法执行
public void setAccessible(boolean flag); /// 设置true,表示禁止检查访问控制
反射的作用
- 基本作用:可以得到一个类的全部成分然后操作
- 可以破坏封装性
- 适合做Java框架,基本上,主流的框架都会基于反射设计出一些通用功能
3. 注解
JAVA代码里的特殊标记
作用: 让其他程序根据在注解信息来决定怎么执行该程序
自定义注解: 自己定义注解
格式:
public @interface 注解名称{
public 属性类型 属性名() default 默认值;
}
原理:
- 注解本质是一个接口,Java中所有注解都继承了Annotation接口
- 一个实现类对象,实现了该注解以及Annotation接口
元注解:修饰注解的注解

注解的解析
判断类上、方法上、成员变量上是否存在注解,并把注解里面的内容给解析出来
如何解析注解:
要解析谁上面的注解,就要先拿到谁(要解析类上面的注解,应该先获取该类的Class对象,再通过Class对象解析其上面的注解;Class、Method、Field、Constructor都实现了AnnotatedElement接口,他们都有解析注解的能力)
应用场景:结合反射等做框架
整理:就是做框架的时候会自定义很多注解,说明怎么执行这段程序(功能),那别人使用这个功能就要完成一些操作,这个时候就要用到反射,拿出类信息、构造器信息、成员变量和方法等信息,执行一些初始化、取值赋值、执行等一些操作。
4. 动态代理
程序为什么需要代理
对象如果干的事太多,可以通过代理来转移部分职责
代理的样子
对象有什么方法想被代理,代理一定要有对应的方法
代理如何知道有什么方法需要代理
接口:想代理的方法
案例:
BigStar
想要代理的接口类Star
代理对象的类
主程序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/1390.html