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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© x531661 初级黑马   /  2019-5-19 10:26  /  977 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  • 函数式接口
    • 概念:有且仅有一个抽象方法的接口
    • 注解:@FunctionalInterface

  • java常用函数式接口举例
    • Supplier:无参有返回值的接口
      @FunctionalInterface
      public interface Supplier<T> {
          T get();
      }
    • Consumer:有参无返回值

      @FunctionalInterface
      public interface Consumer<T> {
          void accept(T t);
          default Consumer<T> andThen(Consumer<? super T> after) {
              Objects.requireNonNull(after);
              return (T t) -> { accept(t); after.accept(t); };
          }
      }
    • Predicate:根据我们传入的参数进行判断
      • test()
      • negate()取反
      • and()  与
      • or()  或


      @FunctionalInterface
      public interface Predicate<T> {
          boolean test(T t);
          default Predicate<T> and(Predicate<? super T> other) {
              Objects.requireNonNull(other);
              return (t) -> test(t) && other.test(t);
          }
          default Predicate<T> negate() {
              return (t) -> !test(t);
          }
          default Predicate<T> or(Predicate<? super T> other) {
              Objects.requireNonNull(other);
              return (t) -> test(t) || other.test(t);
          }
      }
    • Function:根据一个指定参数,放回一直指定类型结果

      @FunctionalInterface
      public interface Function<T, R> {
           R apply(T t);
           default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
              Objects.requireNonNull(after);
              return (T t) -> after.apply(apply(t));
          }
      }

  • stream

    • 获取流的方法
      • list.stream()
      • set.stream()
      • Stream.of()

    • 流的常用方法
      • 过滤:filter()
      • 截取指定参数个数数据:limit()
      • 跳过指定参数个数的数据,返回由该流的剩余元素组成的流:skip()
      • 流合并:Stream.concat(s1,s2)
      • 去重:distinct()
      • 排序:sorted()
      • 根据提供数据进行处理或转换的方法:map()  和 maptoInt()   多了sum()求和
      • 循环输出:foreach()
      • 元素的个数:count()

    • 流收集

      • listStream.collect(Collectors.toList());
      • setStream.collect(Collectors.toSet());
      • arrayStream.collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));


  • java虚拟机类加载的过程和时机        程序的执行经历流程1.SOURECE   源代码阶段-->2.CLASS  字节码对象阶段-->3RUNTIME   运行时阶段
    • 类加载
      • 内置的类加载器,将class文件加载入虚拟机内存
      • 为当前class文件生成java.lang.Class对象(创建对象的模板,分析类的属性方法)

    • 类链接
      • 验证:验证当前类的语法结构
      • 准备:   类变量的内存分配
      • 解析:    将变量名换成内存地址

    • 类初始化
      • 初始化:  变量进行初始化


  • 何时会触发类的加载和初始化
    • java命令执行相应的class 文件的时候
    • 创建类的对象    new Person()
    • 调用类的静态方法或静态变量  Person.name    Person.eat()
    • 初始化某个类的子类
    • 通过反射机制获取java.lang.Class对象的时候

  • 类加载器的作用
    • 将class文件加载入内存,为class文件生成 java.lang.Class对象

  • Java类加载器分类(父类委托)
    • 应用程序类加载器:负责加载我们工程中自定义的类
    • 平台类加载器:底层类库的加载
    • 根类加载器:底层类库的加载

  • 反射的概念
    • 概念:通过class对象动态的获取类内部结构(构造函数,方法,变量),对其进行调用的过程

  • 获取类class对象的三种方式
    • 类名.class
    • 对象.getClass()
    • Class.forName("完整类路径")

  • 反射获取构造方法
    • 获取共有构造方法: c.getConstructors()
    • 获取全部构造方法: c.getDeclaredConstructors()
    • 获取单个的共有构造方法: c.getConstructor(Class<?>... parameterTypes)
    • 获取单个全部的构造方法:c.getDeclaredConstructor(Class<?>... parameterTypes)
    • 获取到构造方法对应的对象后如何实例化:newInstance()
    • 可以调用私有构造:setAccessible(true);

  • 反射获取字段
    • 获取所有公有属性:getFields()
    • 获取所有属性:getDeclaredFields()
    • 获取单个公有属性:getField(String fieldName)
    • 获取单个所有属性:getDeclaredField(String fieldName)
    • 为属性赋值:addressField.set(obj,"西安");
    • 读取属性的值:addressField.get(obj)

  • 反射调用方法

    • 获取所有公有方法包括继承来的:getMethods()
    • 获取所有方法不包括继承来的:getDeclaredMethods()
    • 获取单个公有方法:getMethod("方法名")
    • 获取单个方法:getDeclaredMethod("方法名")
    • 方法调用:m.invoke(obj);








0 个回复

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