目录
JUnit 单元测试
JUnit是一个Java语言单元测试框架。
JUnit单元测试的好处:
- 可以书写一系列的测试方法,对项目的所有的接口或者方法进行单元测试。
- 启动单元测试后,是一个自动化的测试。
- 只需要查看最后的结果
- 每个单元测试的用例是相对独立的,而且是由JUnit启动(自动调用)
- 添加、删除、屏蔽测试方法
jar包
如果要引入第三方的插件,引入的都是“xxx . jar”的文件。
首先要把这个文件导入到我们的工程目录下
其次要添加到工程的依赖目录中
Test注解
是JUnit提供的一个单元测试注解。
如果工程没有导入JUnit的jar包,Test注解是不认识的
运行通过
运行不通过(报错)
测试方法注意事项:
- 不能有返回值
- 不能有参数列表(不能传参)
- 必须有@Test注解
添加JUnit后图标改变
JUnit断言
JUnit的所有的断言都包含Assert类中
这个类提供了很多有用的断言来编写测试用例,只有失败的断言才会被记录。
常用的方法:
- assertEquals:检查两个变量或等式是否相等
- assertTrue:检查条件是否为真
- assertFalse:检查条件是否为假
- assertNotNull:检查对象是否不为空
- assertNull:检查对象是否为空
断言不成功会抛异常,即时程序正常运行,但是结果不正确,也会以失败结束。
JUnit注解
- Test
- Before:在测试方法执行之前执行的方法
- After
运行结果如下
命名规范:
单元测试类的命名:被测试类的类名 + Test(阿里规约)
测试方法的命名:test + 被测试方法的方法名
集合的面试题:
- Hashtable(线程安全的map)和ConcurrentHashMap(单线程)性能测试
- ArrayList和LinkedList性能测试:数组的查询快、插入慢;链表的查询慢、插入快
- 尾插数组快,链表慢
- 遍历数组快
- 头插链表快,数组慢
- 随机删除,如果要过滤的话建议用链表(LinkedList)
开发中以ArrayList为主
JDK8新增
Stream流式编程
容器对象功能的增强
我们可以将流看成流水线,这个流水线是处理数据的流水线
当我们使用一个流时,通常包括三个步骤:
- 获取一个数据源
- 执行操作获取想要的结果
- 每次操作,原有的流对象不改变,返回一个新的Stream对象
Stream有几个特性:
- Stream不存储数据,一般会输出结果
- Stream不会改变数据源,通常情况下会生成一个新的集合
- Stream具有延迟执行的特性,只有调用终端操作时,中间操作才会执行
顺序流:
并行流:
双冒号语法(方法引用)
anyMatch:任意匹配
归约(reduce)
缩减,把一个流缩减成一个值,可以实现对集合的求和,求乘积,求最值
分组
分组将集合分为多个map,比如员工按性别分组、员工按薪资是否高于8000分组
筛选
映射:将一个流的元素按照一定的映射规则映射到另一个流中
排序:sorted
自然排序;compare接口
临时排序:compartor
peek操作:调试
在stream中调试,stream不支持debug
peek类似打断点,输出一下结果
其他操作:合并。去重。限制。跳过...
去重 distinct
skip 跳过几个数据
limit 限制使用几个数据
JDK8四大函数式接口
Consumer< T > :消费者 返回值void accept( T t )
Suptlier:供应商 T get( )
Fuction:函数 R apply( T t) 讲一个数据转化成另一个数据
Predicate:断言接口 boolean test( T t) 判断返回值是boolean
Optional类是java8为了解决null问题
返回一个对象值为空的Optional对象
JDK8新增:
- 函数式接口
- 箭头函数 (lambda表达式) 不是java特有的
- Optional类
- 断言
- Stream流编程
IO流------------对于文件的操作
Input:把数据从物理内存加载到运行内存。(读文件)
Output:把数据从运行内存写到物理内存。(写文件)
java.io包下的类
计算机的输入和输出都是通过二进制完成
工具类:File操作文件的类
1.文件的路径
正斜杠:左斜杠、撇、/
反斜杠:右斜杠、捺、\
在Unix/Linux中,路径的分割采用正斜杠“/”。
在Windows中,路径的分割采用反斜杠“\”。
在Java中,\代表转义
Java中路径必须写两个“\\”,单个“\”代表转义,不代表路径
在File类中,定义了路径分隔符的常量,自动识别操作系统
2.File类的构造器
尽量不要拼接字符串
3.文件的操作
创建一个文件
creatNewFile创建文件,mkdir创建文件夹。
mkdir只能创建一级文件夹,创建多级文件夹用mkdirs
creatNewFile新建文件时不会覆盖已有的重名文件
绝对路径:以盘符开头
相对路径:没有指定的盘符开头
如果没有以盘符开头,系统默认以相对路径创建文件
4.文件夹的操作
5.File类中判断的方法
6.文件夹列表的操作
file类的删除是不走回收站
作业
自建CMD
输入指定的磁盘名:直接进入到磁盘
输入mkdir,创建目录
输入rd,删除文件
输入cnf:创建文件
输入dir遍历当前目录的文件
public class CMD{
public static void main(String[] args) {
while (true) {
Scanner sc = new Scanner(System.in);
// 输入指定的磁盘名:直接进入到磁盘
File nowDir = new File("C:\\Users\\ASUS\\Desktop\\aaa");
System.out.print(nowDir + ">");
String a = sc.next();
if (a.indexOf("-")<0){
System.out.println("输入有误");
continue;
}
// 截取 只取前面部分,+1是截取到-的位置,后面不取
String b = a.substring(a.indexOf("-") + 1, a.length());
// 命令部分固有的
String order = a.substring(0, a.indexOf("-"));
//System.out.println("order="+order);
//System.out.println("b="+b);
// 根目录,文件(目的目录)
File file = new File(nowDir, b);
switch (order){
// 输入mkdir,创建目录
case"mkdir":
file.mkdirs();
break;
// 输入rd,删除文件
case"rd":
file.delete();
break;
// 输入cnf:创建文件
case"cnf":
try {
file.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
break;
// 输入dir遍历当前目录的文件
case"dir":
String[] show= nowDir.list();
for (String s : show) {
System.out.println(s);
}
break;
default:
System.out.println("输错了宝");
}
}
}
}
新建后遍历:
C:\Users\ASUS\Desktop\aaa>mkdir-
C:\Users\ASUS\Desktop\aaa>cnf-稻香.mp4
C:\Users\ASUS\Desktop\aaa>cnf-6.txt
C:\Users\ASUS\Desktop\aaa>dir-
6.txt
稻香.mp4删除后遍历:
C:\Users\ASUS\Desktop\aaa>rd-6.txt
C:\Users\ASUS\Desktop\aaa>dir-
稻香.mp4
总结
今天学的流和IO流的基础知识,感觉依然难以理解,晚上作业是自建CMD,本来对此一点不会还好同桌的帮助,我顺利的写出了CMD知识 。
由开始的无从下手,到问同桌后掌握每一条代码的含义,然后到我自己动手写,并且成功运行,短短数行代码是我零迈开的脚步,以至于运行成功时我乐坏了,然后同桌继续给我拓展功能,增加错误引导功能使得代码更优化。
第一次如此快的掌握思路并运行成功,还进行了优化,今天收获满满!