@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.运行测试方法看颜色