接口中的默认方法与静态方法
Java 8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用 default 关键字修饰。
default String getName(){ return "呵呵呵";}
接口默认方法的”类优先”原则
若一个接口中定义了一个默认方法,而另外一个父类或接口又定义了一个同名的方法时。选择父类中的方法。如果一个父类提供了具体的实现,默认使用父类的方法
接口冲突。如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方是否是默认方法),那么必须覆盖该方法来解决冲突(选择采取那个接口的方法实现)
新时间日期
使用 LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime 类的实例是不可变的对象(线程安全),分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。
![48d1485daa43816e5180fbd57bdc3f22.png](https://i-blog.csdnimg.cn/blog_migrate/318389b90b70f0c23b12b171b66f3613.jpeg)
![bd36d1f8e3d9ebf6592eec7b407669d8.png](https://i-blog.csdnimg.cn/blog_migrate/b42141676d1d095bbd18cab99ba242ba.jpeg)
Instant 时间戳
用于“时间戳”的运算。它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的描述进行运算
Instant ins = Instant.now(); //默认使用 UTC 时区System.out.println(ins);//将时间偏移8小时OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));System.out.println(odt);//将时间转为纳秒System.out.println(ins.getNano());//偏移5秒Instant ins2 = Instant.ofEpochSecond(5);System.out.println(ins2);
输出样式
![01cb4653b190c5519bc2515dc7e5e626.png](https://i-blog.csdnimg.cn/blog_migrate/51bc74eb9346d662e50c516b3674d648.jpeg)
Duration 和 Period
Duration:用于计算两个“时间”间隔
Instant ins1 = Instant.now();Instant ins2 = Instant.now();System.out.println("所耗费时间为:" + Duration.between(ins1, ins2));
Period:用于计算两个“日期”间隔
LocalDate ld1 = LocalDate.now();LocalDate ld2 = LocalDate.of(2011, 1, 1);Period pe = Period.between(ld2, ld1);
日期的操纵(时间校正器)
TemporalAdjuster (接口): 时间校正器。有时我们可能需要获取例如:将日期调整到“下个周日”等操作。
TemporalAdjusters : 该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现。
代码实例:
LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); //将日期设为10 LocalDateTime ldt2 = ldt.withDayOfMonth(10); System.out.println(ldt2); //下一个周末 LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); System.out.println(ldt3);
解析与格式化
java.time.format.DateTimeFormatter 类
//使用系统的样式格式// DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE; //自定义事件输出格式 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E"); LocalDateTime ldt = LocalDateTime.now(); String strDate = ldt.format(dtf); System.out.println(strDate); //将字符串转解析为时间 LocalDateTime newLdt = LocalDateTime.parse(strDate, dtf); System.out.println(newLdt);
时区的处理
Java8 中加入了对时区的支持,带时区的时间为分别为:
ZonedDate、ZonedTime、ZonedDateTime
其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式例如 :Asia/Shanghai 等
ZoneId:该类中包含了所有的时区信息 ; getAvailableZoneIds() : 可以获取所有时区时区信息 ; of(id) : 用指定的时区信息获取 ZoneId 对象
代码实例
//获取上海时区的时间LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));System.out.println(ldt);//返回带时区信息的时间ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"));System.out.println(zdt);//获取所有的时区Set set = ZoneId.getAvailableZoneIds();
与传统日期处理的转换
![69c173899f914a80b2c11321da73642d.png](https://i-blog.csdnimg.cn/blog_migrate/3e4abdcffc30a7bafb3a48c4abc57a5e.jpeg)
![2b963688db07e59a31684d04844f57fc.png](https://i-blog.csdnimg.cn/blog_migrate/210b6fb4b79696b9c956a63836819a89.jpeg)
重复注解与类型注解
Java 8对注解处理提供了两点改进:可重复的注解及可用于类型的注解。
![947fb8d35dd82b7da2f9592384689438.png](https://i-blog.csdnimg.cn/blog_migrate/eaedb763e970ea4ba74b749699e272f9.jpeg)