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

相关推荐
Mr.朱鹏2 小时前
大模型入门学习路径(Java开发者版)上
java·开发语言·spring boot·spring·大模型·llm·transformer
古月฿2 小时前
大学生素质测评系统设计与实现
java·vue.js·redis·mysql·spring·毕业设计
一雨方知深秋2 小时前
程序流程控制
java·for循环·while循环·if分支·switch分支·dowhile循环·嵌套循环
木木一直在哭泣2 小时前
Spring 里的过滤器(Filter)和拦截器(Interceptor)到底啥区别?
后端
cike_y2 小时前
JSP标签&JSTL标签&EL表达式
java·开发语言·jsp
秃然想通2 小时前
Java继承详解:从零开始理解“父子关系”编程
java·开发语言
嘻嘻嘻开心2 小时前
List集合接口
java·开发语言·list
源码获取_wx:Fegn08952 小时前
基于springboot + vue物业管理系统
java·开发语言·vue.js·spring boot·后端·spring·课程设计
無量2 小时前
MySQL事务与锁机制深度剖析
后端·mysql