JAVA -- 12

系统温习------黑马程序员Java+AI智能辅助编程全套视频教程

Java高级技术

单元测试

单元测试就是针对最小的功能单元:方法 ,编写测试代码对其进行正确性测试。

之前通过在main方法编写测试代码,去调用其他方法进行测试。这种方法的问题:

①无法实现自动化测试,一个方法测试失败,可能影响其他方法a的测试。

②无法得到测试的报告,需要程序员自己去观察测试是否成功。

Junit单元测试框架 可以用来对方法进行测试。优点:①灵活地编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试 ,且各自独立 。②不需要程序员去分析测试的结果,会自动生成测试报告出来。

单元测试的步骤:

①为需要测试的业务类,定义对应的测试类 ,并为每个业务方法,编写对应的测试方法(必须:公共、无参、无返回值)

②测试方法上必须声明@Test注解 ,然后在测试方法中,编写代码调用被测试的业务方法进行测试

③开始测试:选中测试方法,右键选择"Junit运行",如果测试通过 则是绿色 ;如果测试失败 ,则是红色。

一般情况下,程序只要没出异常,测试就会通过。我们还应该做断言测试来判断业务的正确性:断言结果是否与预期结果一致。

反射

反射就是加载类 ,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)。

反射第一步:加载类 ,获取类的Class对象。

获取Class对象的三种方式:

反射第二步:获取类中的成分、并对其进行操作。

Class提供了从类中获取构造器的方法:

获取类构造器的作用:创建对象并返回。 (构造器通过类型来定位)

Class提供了从类中获取成员变量的方法:

获取成员变量方法中的参数为成员变量的名字(通过名字来定位)。

获取到成员变量的作用:赋值、取值。

Class提供了从类中获取成员方法的API:

成员方法的作用:执行 (通过方法名和参数类型来定位某方法)

反射的基本作用:

①基本作用:可以得到一个类的全部成分然后操作

②可以破坏封装性

③可以绕过泛型的约束

泛型在编译完之后就没有泛型标签 了,它只在编码阶段约束 ,而反射工作在运行时 ,此时拿泛型集合的对象,这个时候没有反射的约束了。

最重要的用途是:适合做java的框架,基本上,主流的框架都会基于反射设计出一些通用的功能。

反射做一个简易版框架

①定义一个方法,可以接收任意对象。

②每收到一个对象后,使用反射获取该对象的Class对象 ,然后获取全部的成员变量。

③遍历成员变量 ,然后提取成员变量在该对象中的具体值。

④把成员变量名、和其值,写出到文件中去即可。

注解

注解是Java代码里的特殊标记 ,比如@Override、@Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。

注解可以用在类上、构造器上、方法上、成员变量上、参数上等位置处。

自定义注解:自己定义注解

特殊属性名:value

如果注解中只有一个value属性,使用注解时,value名称可以不写。

注解的原理:

注解本质是一个接口 ,Java中所有注解都是继承了Annotation接口的。

@注解(...) :其实就是一个实现类对象 ,实现了该注解以及Annotation接口。

元注解:放在注解上的注解。

@Target声明被修饰的注解只能在哪些位置使用。

@Retention声明注解的保留周期。

①SOURCE只作用在源码阶段 ,字节码文件中不存在。②CLASS(默认值)保留到字节码文件阶段 ,运行阶段不存在。③RUNTIME(开发常用)一直保留到运行阶段。

注解的解析:判断类上、方法上、成员变量上是否存在注解 ,并把注解里的内容给解析出来。

注解控制方法的执行,属性控制方法怎么执行。

动态代理

对象如果觉得自己干的事太多的话,可以通过代理来转移部分职责。

对象有什么方法想被代理 ,代理就一定要有对应的方法。

动态代理的前提是将功能抽象成接口并由被代理对象和代理对象一起实现接口。

使用代理优化用户管理类

使用代理的场景:代理可以帮别人解决一些需求,让别人的业务功能更加直接,不用关注其他的操作,减少业务中的重复代码。

使用代理后,业务方法不需要自己统计性能 ,业务对象中每个方法只关注业务本身 ,将统计性能的功能交给代理来做。

目前上面的代理类不够通用,只能为UsrService这个实现类对象做代理。想变成通用的为任意对象提供代理对象可以使用泛型。

代理模式应用到了AOP切面编程的思想,在正式调用某方法的前后分别切入部分代码.

Spring是一个代理工厂 ,将Java程序中的对象包装成代理对象返回给程序员。

相关推荐
sunshine22 girl23 分钟前
Java学习五 面向对象高级5 内部类1
java·学习
苏supper1 小时前
Spring Boot多环境配置与打包运行
spring boot·后端·spring
geovindu1 小时前
rust: Composite Pattern
开发语言·后端·设计模式·rust·组合模式
SearchMan2 小时前
还有人不知道&和&&的区别?
后端
想用offer打牌2 小时前
Personal Agent爆火 - 它到底是个什么
人工智能·后端·ai编程
IT_陈寒2 小时前
Vue的v-if和v-for混用居然是个天坑
前端·人工智能·后端
用户1305180712152 小时前
JDBC学习DAY2:从Statement到PreparedStatement
java
深度之眼2 小时前
如何判断自己的idea是否可行?是否有人做过?
深度学习·intellij-idea
蛋蛋的就会顺顺的2 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
周杰偷奶茶3 小时前
【Java】数组的定义和使用(附管理系统实战案例)
java·开发语言