JDK8新增的日期处理,自带加解密,Optional特性,lambada表达式,自定义的函数接口,四大接口Funtion,Consumer,Supplier,Predicate的使用,stream流的编程,核心方法map,fitter,reduce,match使用
JDK9新工具Jshell和增强API
JDK10局部变量var的使用
JDK11新标准HttpClient提交Post和Get请求
JDK13新特性文本块和增强switch
在以前的接口里只能有抽象方法,不能有任何方法的实现,在jdk1.8中引入了新的关键字default,使用default修饰方法可以在接口里面定义具体的方法实现
默认方法:在接口里定义一个默认方法,接口的实现类实现的这个接口后,不用管default修饰的方法就可以直接调用。即是接口的默认方法实现
public interface Animal {
void run();
void eat();
default void breath(){
System.out.println("生物都需要呼吸");
}
}
public class Dog implements Animal {
@Override
public void run() {
System.out.println("狗");
}
@Override
public void eat() {
System.out.println("狗");
}
Base64是一种基于64个可打印字符来表示二进制数据的方法,基于64个字符A~Z,a~z,0~9,+,/的编码方式,二进制数据和字符串资料之间可以相互转换。
旧版API:
BASE64Encoder encoder=new BASE64Encoder();
BASE64Decoder decoder=new BASE64Decoder();
String text="加密前数据";
byte[] bytes=text.getBytes();
//加密
String encodertext=encoder.encode(bytes);
System.out.println(encodertext);
//解码
System.out.println(new String(decoder.decodeBuffer(encodertext),"UTF-8"));
5Yqg5a+G5YmN5pWw5o2u
加密前数据
Process finished with exit code 0
缺点:解码和编码的效率比较差,以后的版本会被取消
新版API:
Base64.Decoder decoder= Base64.getDecoder();
Base64.Encoder encoder=Base64.getEncoder();
String text="加密前数据";
byte[] bytes=text.getBytes();
String encodetext=encoder.encodeToString(bytes);
System.out.println(encodetext);
System.out.println(new String(decoder.decode(encodetext),"UTF-8"));
5Yqg5a+G5YmN5pWw5o2u
加密前数据
Process finished with exit code 0
LocalDate:不包含时间的日期
LocalTime:不含日期的时间
LocalDateTime:包含了日期和时间
LocalDate today = LocalDate.now();
System.out.println("今天日期:"+today);
//获取年月日,周几
System.out.println("现在是那年:"+today.getYear());
System.out.println("现在是那月:"+today.getMonth());
System.out.println("现在是那日:"+today.getMonthValue());
System.out.println("现在是几号:"+today.getDayOfMonth());
System.out.println("现在是周几:"+today.getDayOfWeek());
LocalDate changeDate = today.plusYears(1);
System.out.println("加后是哪年年:"+changeDate.getYear());
System.out.println("旧的是哪年年:"+today.getYear());
//⽇日期⽐比较
System.out.println("isAfter: "+changeDate.isAfter(today));
//getYear() int 获取当前⽇日期的年份
//getMonth() Month 获取当前⽇日期的⽉份对象
//getMonthValue() int 获取当前⽇日期是第几⽉
//getDayOfWeek() DayOfWeek 表示该对象表示的⽇日期是星期几
//getDayOfMonth() int 表示该对象表示的⽇日期是这个⽉月第几天
//getDayOfYear() int 表示该对象表示的⽇日期是今年年第⼏天
//plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年年份数
//plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的⽉月份数
//plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数
//minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的月数
//isAfter(ChronoLocalDate other) boolean 比较当前对象⽇日期是否在other对象⽇日期之后
//isEqual(ChronoLocalDate other) boolean 比较两个⽇日期对象是否相等
输出结果:
今天日期:2019-11-19
现在是那年:2019
现在是那月:NOVEMBER
现在是那日:11
现在是几号:19
现在是周几:TUESDAY
加后是哪年年:2020
旧的是哪年年:2019
isAfter: true
Process finished with exit code 0
LocalDateTime ldt = LocalDateTime.of(2020, 11, 11, 8, 20, 30);
System.out.println(ldt);
输出结果:
2020-11-11T08:20:30
Process finished with exit code 0
LocalDateTime today = LocalDateTime.now();
System.out.println(today);
LocalDateTime changeDate = LocalDateTime.of(2020,10,1,10,40,30);
System.out.println(changeDate);
Duration duration = Duration.between( today,changeDate);
//第⼆二个参数减第⼀一 个参数
System.out.println(duration.toDays());//两个时间差的天数
System.out.println(duration.toHours());//两个时间差的⼩小时数
System.out.println(duration.toMinutes());//两个时间差的分钟数
System.out.println(duration.toMillis());//两个时间差的毫秒数
System.out.println(duration.toNanos());//两个时间差的纳秒数
输出结果:
2019-11-19T14:33:29.947
2020-10-01T10:40:30
316
7604
456247
27374820053
27374820053000000
Process finished with exit code 0
主要解决空指针异常(NullPointerException),本质是一个有可选值的包装类,这意味着Optional类j既可以含有对象也可以为空
Optional<Student> opt = Optional.of(user);
Optional<Student> opt = Optional.ofNullable(user);
Optional<Student> opt = Optional.ofNullable(student);
Student s = opt.get();
public static void main(String[] args) {
Student student = null;
test(student);
}
public static void test(Student student){
Optional<Student> opt = Optional.ofNullable(student);
System.out.println(opt.isPresent());
}
Student student1 = null;
Student student2 = new Student(2);
Student result = Optional.ofNullable(student1).orElse(student2);
System.out.println(result.getAge());
Student student = null;
int result = Optional.ofNullable(student).map(obj- >obj.getAge()).orElse(4);
System.out.println(result);