A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

day11 网络编程

软件架构:
CS: Client客户端, Server服务器
BS: Browser浏览器, Server服务器
网络编程
Socket: 套接字  客户端
ServerSocket  服务端
TCP通信的三次握手
1. 客户端向服务端发送验证信息, 等待服务器确认
2. 服务端收到验证信息后, 回复客户端验证信息, 同时发送自己的一条验证信息
3. 客户端收到服务端回复的信息, 确认自己之前发的信息无误, 并再次向服务器发回服务端的验证信息
ServerSocket类
// 构造方法
ServerSocket(int port): 创建一个TCP服务端, 并监听指定端口
// 成员方法
Socket accept(): 监听数据, 会阻塞. 收到数据后返回Socket对象
Socket类
// 构造方法
Socket(String ip, int port): 创建TCP客户端对象
// 成员方法
OutputStream getOutputStream(): 获取输出流对象, 用于发送数据
InputStream getInputStream(): 获取输入流, 用于接收数据
void shutdownOutput(): 关闭输出流, 发送结束标记
void close(): 关闭客户端Socket
day12 函数式接口

.StringBuilder类
reverse(): 将StringBuilder内部保存的内容反转
toString(): 转换为String
常用函数式接口
Supplier: 生产型函数式接口     
抽象方法   T get(): 用于获取一个对象或值.

Consumer: 消费型函数式接口     使用值
默认方法  t     andThen(Consumer<? super T> after): 拼接两个Consumer接口的Lambda对
象实现连续操作. 谁写前面, 谁先消费


Predicate: 条件判断型函数式接口   判断值
抽象方法  boolean test(T t): 判断参数传递的对象. 至于怎么判断, 判断什么, 需要我们编写Lambda表达式实现

Function: 转换型函数式接口     转换值
抽象方法  apply(T t): 将T转换为R. 至于T和R是什么类型, 以及如何转换, 需要传递Lambda表达式实现
day13 Stream 方法引用

Stream流
Pipelining(管道特性): "可以链式调用
内部迭代特性: "不用写for循环"
获取Stream流对象的2种方式:
1. 利用"Collection接口"中的默认方法 default Stream<E> stream() 方法: 集合转Stream对象
2. 利用"Stream接口"中的静态方法 static <T> Stream<T> of(T... values): 数组转Stream对象
tream filter(): 过滤
Stream map(): 映射/转换
Stream limit(): 截取
Stream skip(): 跳过
void forEach(): 遍历
    long count(): 统计
方法引用
Lambda表达式写法:
(String s) -> System.out.println(s)
方法引用写法:  
System.out::println
方法引用能简化以下场景: (方法名后不要写小括号)
场景 格式  简化之前的Lambda 方法引用简化后
1. 通过对象名引用成员方法   对象名::成员方法名  ()->person.eat()      person::eat
2. 通过类名引用静态方法    类名::静态方法名   i -> Math.abs(i)      Math::abs
3. 通过super引用父类成员方法  super::父类方法名  ()->super.eat();      super::eat
4. 通过this引用本类成员方法  this::本类方法名  ()->this.eat();      this::eat
5. 引用某个类的构造方法    类名::new      name->new Person(name)   Person::new
6. 引用创建数组的方法     数据类型[]::new   length->new int[length];  int[]::new

day14 JUnit 反射 注解

JUnit单元测试
JUnit使用步骤:
1. 定义一个测试类(也叫测试用例)
包名:xxx.xxx.xx.test
被测试的类名:  Calculator  
对应的测试类名: CalculatorTest
2. 定义测试方法:可以独立运行
被测试的方法名:    add()   
    对应的测试方法名: testAdd()
建议测试方法的返回值是void, 参数列表是空参
3. 在方法上加 @Test 注解
4. 在 @Test 注解上按 Alt+Enter, 选择 "Add 'JUnit4' to Classpath" 导入JUnit依赖环境
5. 在方法名上右键, 选择 "Run '方法名()'"
断言: Assert
使用断言操作 Assert.assertEquals(期望的结果, 运算的结果);
反射
成员变量(字段): Field类的对象 getFields()
构造方法: Constructor类的对象 getConstructors()
成员方法: Method类的对象  getMethods()
ava代码在计算机中的3个阶段:
SOURCE: 源代码阶段
CLASS: 类对象阶段
RUNTIME: 运行时阶段
取一个类的字节码对象的3种方式:
1. Class.forName("全类名")
将字节码文件加载进内存,返回Class对象
适用场景: 多用于配置文件,将类名定义在配置文件中. 读取文件, 加载类
2. 类名.class             .
通过类名的属性class获取
适用场景: 多用于参数的传递  getConstructor(String.class, int.class)
3. 对象.getClass()
getClass()方法在Object类中定义
适用场景: 多用于对象的获取字节码的方式 p.getClass()
注解
@Override: 检测被该注解标注的方法是否是"重写"父类(接口)的
@Deprecated: 该注解标注的内容,表示已过时
@SuppressWarnings: 压制警告. 一般传递参数all  @SuppressWarnings("all")
自定义注解
元注解
  public @interface 注解名称 {
    属性; (接口中的抽象方法)
枚举
public enum 枚举名 {
  枚举常量1, 枚举常量2, 枚举常量3;
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马