1.jdk8的关键字default和static关键字:jdk8中,可以用default关键字来修饰接口中的方法,这样其继承类就无需实现该方法;其次static关键字也能用在接口中;
动物类的代码:
package com.example.demo.jdk8;
public interface Animal {
void eat();
default void sleep() {
System.out.println("sleep");
}
static void run() {
System.out.println("run");
}
}
猫类的代码:
package com.example.demo.jdk8;
public class Cat implements Animal{
@Override
public void eat() {
System.out.println("cat is eating");
}
}
测试代码:
package com.example.demo.jdk8;
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat();
cat.sleep();
Animal.run();
}
}
运行结果:
cat is eating
sleep
run
2.BASE64加解密:可以将二进制字符串转换成8bit来进行传输,直接在java.util包下,引用时不用导入依赖,而且加解密速度快
代码测试:
package com.example.demo.jdk8;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class Base64Test {
public static void main(String[] args) throws UnsupportedEncodingException {
Base64.Encoder encoder = Base64.getEncoder();
Base64.Decoder decoder = Base64.getDecoder();
String string = "Base64测试加解密";
byte[] bytes = string.getBytes("UTF-8");
String encodeToString = encoder.encodeToString(bytes);
byte[] decode = decoder.decode(encodeToString);
String decodeString = new String(decode, "UTF-8");
System.out.println(encodeToString);
System.out.println(decodeString);
}
}
测试结果
QmFzZTY05rWL6K+V5Yqg6Kej5a+G
Base64测试加解密
3.日期类处理:在java.time包下面,线程安全,提供日期比较、加减等常用操作
三个核心类:
LocalDate:不包含具体时间的⽇期
LocalTime:不含⽇期的时间
LocalDateTime:包含了⽇期及时间
代码测试
package com.example.demo.jdk8;
import java.time.LocalDate;
public class DateTest {
public static void main(String[] args) {
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 表示该对象表示的⽇期是今年第⼏天
//withYear(int year) LocalDate 修改当前对象的年份
//withMonth(int month) LocalDate 修改当前对象的⽉份
//withDayOfMonth(int dayOfMonth) LocalDate 修改当前对象在当⽉的⽇期
//plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年份数
//plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的⽉份数
//plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数
//plusDays(long daysToAdd) LocalDate 当前对象增加指定的天数
//minusYears(long yearsToSubtract) LocalDate 当前对象减去指定的年数
//minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的⽉数
//minusWeeks(long weeksToSubtract) LocalDate 当前对象减去指定的周数
//minusDays(long daysToSubtract) LocalDate 当前对象减去指定的天数
//compareTo(ChronoLocalDate other) int ⽐较当前对象和other对象在时间上的⼤⼩,返回值如果为正,则当前对象时间较晚,
//isBefore(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在other对象⽇期之前
//isAfter(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在other对象⽇期之后
//isEqual(ChronoLocalDate other) boolean ⽐较两个⽇期对象是否相等
}
}
运行结果:
今天⽇期:2020-03-02
现在是哪年:2020
现在是哪⽉:MARCH
现在是哪⽉(数字):3
现在是⼏号:2
现在是周⼏:MONDAY
加后是哪年:2021
旧的是哪年:2020
isAfter: true
时间格式化类:DateTimeFormatter
计算⽇期时间差:Duration
测试代码:
package com.example.demo.jdk8;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTest {
public static void main(String[] args) {
// 格式化时间
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String ldtStr = dtf.format(ldt);
System.out.println(ldtStr);
System.out.println("--------------------------");
// 获取指定的⽇期时间对象
LocalDateTime ldt1 = LocalDateTime.of(2020, 11, 11, 8, 20, 30);
System.out.println(ldt1);
System.out.println("--------------------------");
// 计算⽇期时间差 java.time.Duration
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());//两个时间差的纳秒数
System.out.println("--------------------------");
}
}
运行结果:
2020-03-02T13:37:47.079
2020-03-02 13:37:47
--------------------------
2020-11-11T08:20:30
--------------------------
2020-03-02T13:37:47.099
2020-10-01T10:40:30
212
5109
306542
18392562901
18392562901000000
--------------------------
4.Optional是一个用于解决NullPointerException的包装类
测试代码:
package com.example.demo.jdk8;
import java.util.Optional;
public class OptionalTest {
public static void main(String[] args) {
Card card = null;
// of不能传入null,不然会报 java.lang.NullPointerException 的错
//Optional<Card> optionalCard = Optional.of(card);
// 传入null不会报错
Optional<Card> optionalCard1 = Optional.ofNullable(card);
if(optionalCard1.isPresent()){
Card card1 = optionalCard1.get();
System.out.println(card1);
}else {
System.out.println("card对象为null");
}
}
}
测试结果:
card对象为null
注:本文是基于小滴课堂的笔记总结,链接如下:
小滴课堂官网
来源:CSDN
作者:hecr_mingong
链接:https://blog.csdn.net/hecr_mingong/article/details/104608043