| 
 
| 本帖最后由 小北京 于 2018-12-2 17:10 编辑 常用的流操作
 
 
 获取流对象   集合->流:集合对象.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): 合并流
 
 
 (扩展: 收集器)
 Stream不是集合,也不是数组,也不是某种数据结构,所以Stream内部不能存储元素,Stream是一种函数模型
 
 
 
 
 方法引用基本
 对象的成员方法:   对象名::成员                     person::eat
 方法名静态方法:   类名::静态方法名                Math::abs
 父类的方法:           super::成员方法名                super::eat
 本类的方法:           this::成员方法名                this::eat
 
 
 类和数组的构造器引用
 引用某个类的构造方法: 类名::new                        Person::new
 引用创建数组的方法  数据类型[]:new                int[]::new
 
 
 
  JUnit 反射 注解
 JUnit单元测试: 测试一个方法有没有问题, 是否能否按照我们设计的方式运行 (不用main方法直接运行)
 
 
 反射
 反射: 概述
 框架:
 半成品软件. 可以在框架的基础上进行软件开发, 简化编码
 比如JUnit就是一个单元测试框架, 它不是一个独立的软件, 而是和我们开发的软件结合, 简化代码测试
 
 
 反射: 将类的各个组成部分, 封装为其他对象, 这就是反射机制
 成员变量(字段): Field类的对象
 构造方法: Constructor类的对象
 成员方法: Method类的对象
 
 
 好处:
 1. 可以在程序运行过程中, 操作这些对象
 2. 可以解耦, 提高程序的可扩展性
 Java代码在计算机中的3个阶段:
 SOURCE: 源代码阶段
 CLASS: 类对象阶段
 RUNTIME: 运行时阶段
 
  反射: 获取字节码对象的3种方式
 1. Class.forName("全类名")
 将字节码文件加载进内存,返回Class对象
 适用场景: 多用于配置文件,将类名定义在配置文件中. 读取文件, 加载类
 2. 类名.class .
 通过类名的属性class获取
 适用场景: 多用于参数的传递 getConstructor(String.class, int.class)
 3. 对象.getClass()
 getClass()方法在Object类中定义
 适用场景: 多用于对象的获取字节码的方式 p.getClass()
 同一个类的字节码对象, 只有"唯一的一个
 
 
 反射: 获取成员变量Field
 
  注解
 注解: 概念
 
 
 注解: JDK内置
 JDK中预定义的一些注解:
 @Override: 检测被该注解标注的方法是否是"重写"父类(接口)的
 @Deprecated: 该注解标注的内容,表示已过时
 @SuppressWarnings: 压制警告. 一般传递参数all @SuppressWarnings("all")
 
 
 public interface 接口名 {}
 自定义注解格式:关键字 @interface
 元注解
 public @interface 注解名称 {
 属性; (接口中的抽象方法)
 属性;
 属性;
 ...
 }
 
 
 自定义注解: 属性
 属性:接口中的"抽象方法"
 属性的要求:
 1. 属性的"返回值类型"可以是以下类型
 基本数据类型(8种)
 String
 枚举
 注解
 以上类型的数组
 2. 定义了属性,在使用注解时, 需要"给属性赋值" (其实是抽象方法的返回值)
 1. 属性使用 default 关键字指定默认值, 则可以不赋值
 2. 如果只有一个名为"value"的属性需要赋值, 则 value 可以省略, 直接写值
 
 
 
 
 | 
 |