一、JUnit
1.1、为什么需要 JUnit
1、一个类有很多功能代码需要测试,为了测试,就需要写入到main方法中
2、如果有多个功能代码测试,就需要来回注销,切换很麻烦
3、如果可以直接运行一个方法,就方便很多,并且可以给出相关信息,就好了->JUnit
1.2、基本介绍
1、JUnit是一个Java语言的单元测试框架
2、多数Java的开发环境都已经集成了JUnit作为单元测试的工具
1.3、使用方法
java
import org.junit.Test;
public class JUnit_ {
public static void main(String[] args) {
//传统方式
//new JUnit_().m1();
//new JUnit_().m2();
}
@Test
public void m1() {
System.out.println("m1方法被调用");
}
@Test
public void m2() {
System.out.println("m2方法被调用");
}
@Test
public void m3() {
System.out.println("m3方法被调用");
}
}

二、单例设计模式
java
public class Test {
public static void main(String[] args) {
// 目标:设计单例类。
A a1 = A.getInstance();
A a2 = A.getInstance();
System.out.println(a1);
System.out.println(a2);
System.out.println(a1 == a2);
System.out.println("============================");
B b1 = B.getInstance();
B b2 = B.getInstance();
System.out.println(b1);
System.out.println(b2);
System.out.println(b1 == b2);
}
}
2.1、懒汉式
java
// 设计成单例设计模式-饿汉式单例类
// 拿对象时,对象已经创立好了
public class A {
// 2、定义一个静态变量,用于存储本类的一个唯一对象。
// public static final A a = new A();
private static A a = new A();
// private static final A a = new A();
// 1、私有化构造器: 确保单例类对外不能创建太多对象,单例才有可能性。
private A() {
}
// 3、提供一个公开的静态方法,返回这个类的唯一对象。
public static A getInstance() {
return a;
}
}
2.2、饿汉式
java
// 设计成单例设计模式-懒汉式单例类
// 拿对象时,对象可能还没创立好
public class B {
// 2、私有化静态变量
private static B b;
// 1、私有化构造器
private B() {
}
// 3、提供静态方法返回对象: 真正需要对象的时候才开始创建对象。
public static B getInstance() {
if (b == null) {
// 第一次拿对象时,会创建对象,给静态变量b记住。
b = new B();
}
return b;
}
}
三、函数式编程Lambda表达式
3.1、基本介绍
1、此"函数"类似于数学中的函数 ( 强调做什么 ) ,只要输入的数据一致返回的结果也是一致的

2、函数式编程解决了什么问题?
使用 Lambda 函数替代某些匿名内部类对象,从而让程序代码更简洁,可读性更好。
3、JDK8开始新增的一种语法形式,它表示函数
可以用于替代某些匿名内部类对象,从而让程序更简洁,可读性更好。
(被重写方法的形参列表)->{
被重写方法的方法体代码。
}
3.2、注意事项
1、注意:Lambda 表达式只能替代函数式接口的匿名内部类!!!
2、什么是函数式接口?
有且仅有一个抽象方法的接口。
注意:将来见到的大部分函数式接口,上面都可能会有一个 @Functionallnterface 的注解,该注解用于约束当前接口必须是函数式接口。
3.3、应用
3.3.1、示例1
java
public class LambdaDemo1 {
public static void main(String[] args) {
// 目标:认识Lambda表达式:搞清楚其基本作用。
Animal a = new Animal() {
@Override
public void cry() {
System.out.println("🐱是喵喵喵的叫~~~~");
}
};
a.cry();
// 错误示范:Lambda并不是可以简化全部的匿名内部类,Lambda只能简化函数式接口的匿名内部类。
// Animal a1 = () -> {
// System.out.println("🐱是喵喵喵的叫~~~~");
// };
// a1.cry();
System.out.println("=====================================================");
/* Swim s1 = new Swim() {
@Override
public void swimming() {
System.out.println("学生🏊贼快~~~~");
}
}; */
// Lambda只能简化函数式接口的匿名内部类。
Swim s1 = () -> {
System.out.println("学生🏊贼快~~~~");
};
s1.swimming();
}
}
abstract class Animal{
public abstract void cry();
}
// 函数式接口:只有一个抽象方法的接口。
@FunctionalInterface // 声明函数式接口的注解。
interface Swim{
void swimming();
}
3.3.2、示例2
java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
// 姓名 年龄 身高 性别
private String name;
private int age;
private double height;
private char sex;
}
java
import javax.swing.*;
import java.util.Arrays;
public class LamdbaDemo2 {
public static void main(String[] args) {
// 目标:用Lambda表达式简化实际示例。
test1();
test2();
}
public static void test1(){
Student[] students = new Student[6];
students[0] = new Student("殷素素", 35, 171.5, '女');
students[1] = new Student("杨幂", 28, 168.5, '女');
students[2] = new Student("张无忌", 25, 181.5, '男');
students[3] = new Student("小昭", 19, 165.5, '女');
students[4] = new Student("赵敏", 27, 167.5, '女');
students[5] = new Student("刘亦菲", 36, 168, '女');
// 需求:按钮年龄升序排序。可以调用sun公司写好的API直接对数组进行排序。
// Arrays.sort(students, new Comparator<Student>() {
// @Override
// public int compare(Student o1, Student o2) {
// return o1.getAge() - o2.getAge(); // 按照年龄升序!
// }
// });
// Arrays.sort(students, (Student o1, Student o2) -> {
// return o1.getAge() - o2.getAge(); // 按照年龄升序!
// });
// Arrays.sort(students, (o1, o2) -> {
// return o1.getAge() - o2.getAge(); // 按照年龄升序!
// });
Arrays.sort(students, (o1, o2) -> o1.getAge() - o2.getAge());
// 遍历数组中的学生对象并输出
for (int i = 0; i < students.length; i++) {
Student s = students[i];
System.out.println(s);
}
}
public static void test2(){
JFrame win = new JFrame("登录窗口");
win.setSize(300, 200);
win.setLocationRelativeTo(null); // 居中显示。
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
win.add(panel);
JButton btn = new JButton("登录");
panel.add(btn);
// java要求必须给这个按钮添加一个点击事件监听器对象,这样就可以监听用户的点击操作,就可以做出反应。
// 开发中不是我们要主动去写匿名内部类,而是用别人的功能的时候,别人可以让我们写一个匿名内部类吗,我们才会写!!
// btn.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// System.out.println("登录成功!");
// }
// });
// btn.addActionListener((ActionEvent e) -> {
// System.out.println("登录成功!");
// });
// btn.addActionListener((e) -> {
// System.out.println("登录成功!");
// });
// btn.addActionListener(e -> {
// System.out.println("登录成功!");
// });
btn.addActionListener(e -> System.out.println("登录成功!"));
win.setVisible(true);
}
}