how2j学习记录_java基础_基础题_16-20

Posted 留点汗证明还活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了how2j学习记录_java基础_基础题_16-20相关的知识,希望对你有一定的参考价值。

16.Java 8有哪些新特性

  1.Lambda 表达式
   简化 代码,仅此而已
   如原来内部类实现多线程
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
      System.out.println("run方法重写的方法体");
    }
    });
   简化后
    Thread thread1 = new Thread(()->System.out.println("run方法重写的方法体"));

  Lambda变量作用域
    Lambda表达式只能引用外部被final修饰的局部变量,换句话说在Lambda表达式中我们不能修改定义在外的局部变量,其实和内部类一样,不能修改外部类的变量,但是可以获取
  2.方法引用
    方法引用通过方法的名字来指向一个方法。
    方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
    方法引用使用一对冒号 :: list.forEach(System.out::println);
  3.函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口
    函数式接口可以被隐式转换为 lambda 表达式
  4.默认方法
    简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。我们只需在方法名前面加个 default 关键字即可实现默认方法
  5.Stream
    stream() − 为集合创建串行流。
    parallelStream() − 为集合创建并行流。
    filter 过滤
      stringCollection.stream().filter((s) -> s.startsWith("a")).forEach(System.out::println);
    Sort 排序
      stringCollection.stream().sorted().filter((s) -> s.startsWith("a")).forEach(System.out::println);
    Map 映射
      stringCollection.stream().map(String::toUpperCase).sorted((a, b) -> b.compareTo(a)).forEach(System.out::println);
    Match 匹配
    Count 计数
      long startsWithB =stringCollection.stream().filter((s) -> s.startsWith("b")).count();
    Stream有串行和并行两种,串行Stream上的操作是在一个线程中依次完成,而并行Stream则是在多个线程上同时执行
  6.Optional 类是一个可以为null的容器对象
  7.新的时间api
    // 获取当前的日期时间
    LocalDateTime currentTime = LocalDateTime.now();
    System.out.println("当前时间: " + currentTime);
    LocalDate date1 = currentTime.toLocalDate();
    System.out.println("date1: " + date1);
    Month month = currentTime.getMonth();
    int day = currentTime.getDayOfMonth();
    int seconds = currentTime.getSecond();
    System.out.println("月: " + month +", 日: " + day +", 秒: " + seconds);
    LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
    System.out.println("date2: " + date2);
    // 12 december 2014
    LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
    System.out.println("date3: " + date3);
    // 22 小时 15 分钟
    LocalTime date4 = LocalTime.of(22, 15);
    System.out.println("date4: " + date4);
    // 解析字符串
    LocalTime date5 = LocalTime.parse("20:15:30");
    System.out.println("date5: " + date5);
    时间格式化:
      String aa="2019-01-02 22:13:10";
      DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
      LocalDateTime time = LocalDateTime.parse(aa, dateTimeFormatter);

17.Collection 和 Collections的区别 

  Collection是接口,是List和Set的父接口
  Collections是工具类,提供了排序,混淆等等很多实用方法

18.&和&&的区别

  & 有两个作用,分别是 位与 和 逻辑与
  && 就是逻辑与
  作为逻辑与, & 和 && 分别表示长路与和短路与
    长路与 两侧,都会被运算
    短路与 只要第一个是false,第二个就不进行运算了

19.Overload和Override的区别

  Overload是方法重载的意思,指的是在同一个类里面,方法名一样,但是参数不一样
  Override是方法重写的意思,指的是子类继承了父类的某个方法后,重新又写了一遍
  Overloaded的方法是否可以改变返回值的类型? 可以,重载其实本质上就是完全不同的方法,只是恰好取了相同的名字

20.heap和stack有什么区别

  heap: 堆
  stack: 栈 (在一些书籍里,会被翻译为堆栈,实际上指的就是单纯的这个栈)
  存放的内容不一样:
    heap: 是存放对象的
    stack: 是存放基本类型(int, float, boolean 等等)、引用(对象地址)、方法调用
  存取方式不一样:
    heap: 是自动增加大小的,所以不需要指定大小,但是存取相对较慢
    stack: 是固定大小的,并且是FILO 先入后出的顺序,并且存取速度比较快

以上是关于how2j学习记录_java基础_基础题_16-20的主要内容,如果未能解决你的问题,请参考以下文章

No_16_0221 Java基础学习第二天

Java网络编程学习A轮_01_目标与基础复习

javascript语法基础_java教程

java基础_面试题_下列代码中编译错误的是_数据类型自动提升

寒假学习记录5_Scala面向对象编程基础1

JAVA 面试基础