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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李松松 中级黑马   /  2018-12-2 14:56  /  676 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

day11


辨别UDP和TCP协议特点
UDP
1.无线连接的不可靠协议
2.以包发送,一个包64K
3.速度快效率高,容易丢包
TCP
1.需要建立连接的可靠协议
2.没有数据大小限制
3.速度慢效率低,安全性高
TCP协议下两个常用类名
客户端:Socket
服务端:ServerSocket
TCP协议下字符串数据传输程序
客户端发送字符串的byte
服务端接收客户端的byte
服务端回写客户端内容
客户端再接收服务端的响应
TCP协议下文件上传案例
客户端
读取本地文件
发送到服务端
读取服务端的响应结果
服务端
接受客户端的文件数据
写入到服务端的磁盘
发送相应客户端
软件结构
C/S         Client Server 客户端 服务端
B/S         Browser Server 浏览器 服务端
网络通信三要素
1.通信协议:怎么传输
2.IP地址:传给哪个主机
3.端口号:传给主机的哪个进程
文件上传阻塞问题
shutdownOutput(): 关闭输出流, 告知服务端数据发送完
day12

@FunctionalInterface注解
@FunctionalInterface注解 检测是否是函数式接口
Lambbda作为方法的参数
方法参数是函数式接口类型时,才能使用Lambda最为参数
使用Supplier函数式接口
get()
Consumer函数式接口
accept():消费指定的参数
Consumer andThen(Consumer c)
Predicate函数式接口
Boolean test(T t):判断参数值,返回判断结果
Predicate and(Predicate p)
Predicate or(Predicate p)
Predicate negate()
Function函数式接口
R apply(T t): 将T转换为R
Function andThen(Function f)
day13

今日API
stream() :将集合穿环卫Stream对象
of        :将数组转换为Stream对象
concat        :合并为新流
forEach        :遍历流中的元素进行逐一消费
filter        :过滤符合条件的结果,返回过滤后的流
map        :将T元素转换为R元素,返回新的流
Limit()        :从流中获取前maxSize个
Skip()        :从流中跳过n各元素,获取后面的元素

方法引用能简化以下场景
1.通过对象名引用成员方法        对象名::成员方法名
2。通过类名引用静态方法        类名::静态方法名
3.通过super引用父类成员方法                super::父类方法名
4.通过this引用本类成员方法        this::本类方法名
5.引用某个类的构造方法                类名::new
6.引用创建数组的方法                数据类型[ ]::new

流与集合相比的优点
1.管道特性,链式调用
2.内部迭代,不用for循环
常用的流才做
集合转流:
集合对象.steam()
数组转流
Steam.of(数组)
延迟方法:返回值类型Steam
filter()
map()
limit()
skip()
终结方法:返回类型不是Stream
forEach()
count()

合并流
concat(s1,s2)
流转集合:
        List list = stream对象.collect(Collectors.toList());
        Set set = stream对象.collect(Collectors.toSet());
        Map map = stream对象.collect(Collectors.toMap(fun, fun))
4种方式使用方法引用
对象名::成员方法名
类名::静态方法名
super::父类方法名
this::本来方法名
类和数组的构造器的引用
类名::new
数据类型[ ] ::new
day14

获取一个类的字节码对象的3种方式
1.Class.forName("全类名")
2.类名.class
3.对象.getClass()
获取成员变量们
getFields()        获取所有public的成员变量
getField()获取指定的public的成员变量
getDeclaredFields()获取所有的成员变量,不考虑权限修饰符
getDeclaredField()获取指定名称的成员变量,不考虑权限修饰符
获取构造方法们
getConstructors()获取所有public的构造方法
getDeclaredField()获取指定位置的public的构造方法
getDeclaredConstructors()获取所有的构造方法,不考虑权限修饰符
getDeclaredConstructor()获取指定的构造方法,不考虑权限修饰符
获取成员方法
getMethods()获取所有public的成员方法
getMethod(String name, Class<?>... parameterTypes)获取指定public成员方法
getDeclaredMethods()获取所有成员方法,不考虑权限修饰符
获取Class对象代表的类全类名
getName()获取当前Class对象代表的类的全类名
其他
newInstance()使用当前类的空参构造创建一个对象
getAnnotation(Class<A> annotationClass)获取当前类的注解对象
getClassLoader()返回该类的加载器
成员方法
set(obj,value)设置指定对象的成员变量的值
get(obj)获取指定对象的成员变量的值
setAccessible(flag)传true时忽略访问权限修饰符的安全检查,暴力反射

inoke(obj,args)使用指定对象和指定参数值调用此方法
getName()获取方法名
setAccessible(flag)传true时忽略访问权限修饰符的安全检查,暴力反射
getResourceAsStream(String name): 读取相对于bin目录中的文件, 返回一个字节流
常用元注解
ElementType枚举的常用取值:
TYPE:可以作用于类上
METHOD:可以作用于方法上
FIELD:可以作用于成员变量上
RetentionPolicy枚举的取值:
SOURCE: 保留到源代码阶段
CLASS: 保留到类对象阶段
RUNTIME: 保留到运行时阶段
通过反射获取成员方法对象并且调用方法
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(参数值,...)
使用注解并了解自定义注解的语法规范
元注解
public  @interface 注解名 {
    属性(抽象方法)
    返回值类型 方法名() default 默认值;
}
能够使用Junit进行单元测试
1.导入一来Junit4
2.在被测试的方法加上@Test注解
Assert.assertEquals(期望的值,实际值)
3.运行测试方法看颜色




0 个回复

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