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的主要内容,如果未能解决你的问题,请参考以下文章