本帖最后由 cccyj 于 2018-12-2 15:33 编辑
11-14四天笔记汇总
day11 网络编程 UDP和TCP协议特点 UDP: 用户数据报协议 1. 无连接的不可靠的协议 2. 数据以包的形式发送, 一个包64K 3. 速度快效率高, 容易丢包 TCP: 传输控制协议 1. 有连接的可靠协议 2. 直接传输数据没有大小限制 3. 速度慢, 安全性高 ServerSocket java.net.ServerSocket类: TCP服务端 // 构造方法 ServerSocket(int port): 创建一个TCP服务端, 并监听指定端口// 成员方法 Socket accept(): 监听数据, 会阻塞. 收到数据后返回Socket对象 void close(): 关闭服务端ServerSocket
Socket java.net.Socket类: TCP客户端 // 构造方法 Socket(String ip, int port): 创建TCP客户端对象// 成员方法 OutputStream getOutputStream(): 获取输出流对象, 用于发送数据 InputStream getInputStream(): 获取输入流, 用于接收数据 void shutdownOutput(): 关闭输出流, 告知服务端数据发送完毕 void close(): 关闭客户端Socket
问题 1.TCP和UDP协议的特点? day12 函数式接口 @FunctionalInterface注解 @FunctionalInterface 作用: 检测接口是否符合函数式接口的要求, 不符合就编译报错 用在哪: 在接口声明的上面 @FunctionalInterface public interface 接口名{} Lambda延迟执行的特点 几个常用的函数式接口 Supplier java.util.function.Supplier<T>函数式接口: 生产型函数式接口 // 抽象方法 T get(): 用于获取一个对象或值. 至于获取什么值, 怎么获取, 需要我们根据应用场景编写Lambda来实现
Consumer java.util.function.Consumer<T>函数式接口: 消费型函数式接口 // 抽象方法 void accept(T t): 用于消费(使用)一个对象或值. 至于怎么消费, 需要我们根据应用场景编写Lambda来实现 // 默认方法 default Consumer<T> andThen(Consumer<? super T> after): 拼接两个Consumer接口的Lambda对象实现连续操作. 谁写前面, 谁先消费
Predicate java.util.function.Predicate<T>函数式接口: 条件接口, 用于判断 // 抽象方法 boolean test(T t): 判断参数传递的对象. 至于怎么判断, 要判断什么, 需要我们编写Lambda表达式来实现 // 默认方法 (用于连接多个判断条件) default Predicate<T> and(Predicate<? super T> other): 与 default Predicate<T> or(Predicate<? super T> other): 或 default Predicate<T> negate(): 非, 取相反结果
Function java.util.function.Function<T,R>: 根据一个T类型的数据得到另一个R类型的数据 T称为前置条件, 也就是输入(input)的类型 R称为后置条件, 也就是返回结果(result)的类型 有进有出, 所以称为"函数Function" // 抽象方法 R apply(T t): 将T转换为R // 默认方法 default <V> Function<T, V> andThen(Function<? super R, ? extends V> after): 拼接多个Function转换
问题 1.常用的几个函数式接口以及他们中常用的方法。 day13 Stream流 方法引用 常用的流操作 获取流对象 集合->流: 集合对象.stream() 数组->流: Stream.of(数组) Stream方法: 延迟方法: Stream filter(Predicate p): 过滤 Stream map(Function f): 转换映射 Stream limit(long n): 只要前n个 Stream skip(long n): 不要前n个终结方法 long count(): 返回流中元素的个数 void forEach(Consumer c): 遍历消费每个元素静态方法 Stream concat(Stream s1, Stream s2): 合并流
方法引用(简化Lambda表达式) 对象的成员方法: 对象名::成员方法名 静态方法: 类名::静态方法名 父类的方法: super::成员方法名 本类的方法: this::成员方法名 类和数组的构造器引用 类: 类名::new 数组: 数据类型[]::new 问题 1.Stream流操作中什么方法可以支持链式调用,哪些是终结方法,哪些是延迟方法? 2.练习使用Stream流的方式操作集合。
day14 JUnit 反射 注解
掌握获取类的字节码对象的三种方式
1. Class.forName("全类名");
2. 类名.class
3. 对象名.getClass()能够通过反射获取成员方法对象,并且调用方法
1. 获取类的字节码对象Class cls
2. Method m = cls.getDeclaredMethod("方法名", 参数类型.class, ...)
3. 返回值 = m.invoke(对象, 参数值,...);能够通过反射创建类的实例对象
1. 获取类的字节码对象Class cls
2. 无参: cls.newInstance()
有参: Constructor con = cls.getConstructor(参数类型.class, ...)
对象 = con.newInstance(参数值, ...)能够说出注解的作用,能描述和注释的区别
1. 生成文档 @param @return
2. 代码分析 @ProAnno @Check
3. 编译检查 @Override @FunctionalInterface
注释: 给程序员看
注解: 给程序看能够使用注解并了解自定义注解的语法规范
元注解
public @interface 注解名 {
属性(抽象方法)
返回值类型 方法名() default 默认值;
}
只有一个属性名value, 使用时省略value= @Pro(11)
数组元素只有一个, 省略{}
返回值类型:
基本类型
String
枚举
注解
以上的数组能够说出常用的元注解及其作用
@Target: 规定注解所使用的位置
ElementType.TYPE类 METHOD方法 FIELD成员变量
@Retention: 规定注解所保存的时期
RetentionPolicy.RUNTIME
@Documented: 保存到API文档中
@Inherited: 子类可以继承该注解能够使用Junit进行单元测试1. 导入依赖 JUnit4
2. 在被测试的方法上加 @Test 注解
Assert.assertEquals(期望的值, 实际值)
3. 运行测试方法看颜色
|