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程序中的对象包装成代理对象返回给程序员。

相关推荐
Wang's Blog4 分钟前
Java 项目实战: 交友项目 - 用户体系集成:根据环信id查询用户详情
java·lua·交友
摇滚侠9 分钟前
《On Java 中文版 基础卷》阅读笔记 复用 13
java·笔记·python
2601_9689007712 分钟前
玻璃深加工的工艺窗口:4 道工序的温度与时间参数边界
android·java·javascript
用户2986985301415 分钟前
Python 将 Word 文档转换为 XML 的实践要点
后端·python·api
薛之谦_18 分钟前
用 Java 实现阿里云式 IAM 子用户管理:架构设计与表结构详解
java·python·阿里云
甜到心里的蛋糕1 小时前
抖音评论自动回复机器人部署实践:无头 Chrome + DeepSeek + NapCat(2C2G 云主机)
java·jvm·chrome·python·抖音·deepseek
Java爱好狂.1 小时前
阿里1658页Java面试题总结(含答案)
java·后端·高并发·架构师·java面试·java面试题·java八股文
vipxieliang1 小时前
PHP Swoole 协程模型详解:协程与线程/进程、调度、常驻内存及与 Go goroutine 的异同
后端·php
lazy H1 小时前
【计算机网络】第 12 篇:IPv6 详解——地址格式、地址类型与双栈网络
网络·经验分享·后端·学习·计算机网络·408
Thanks_ks1 小时前
从 0.1+0.2 不等于 0.3 说起:聊聊浮点数精度问题
java·python·数值计算·精度丢失·bigdecimal·浮点数·ieee754