Java8新特性Optional类及新时间日期API示例详解
Java8引入了新的特性Optional类和新的时间日期API,本文将从简介、Optional类、新时间日期API两个方面详细讲解这些新特性,并通过两条示例来进一步说明。
简介
Java8新特性是对Java语言本身的更新,涉及到Java SE库的更新,这意味着我们能够在开发程序时更轻松地编写可读性更强的代码。Java8的新特性主要包括Lambda表达式、Stream API、新的日期时间API和Optional类。
本文重点介绍Java8的新特性Optional类和新的时间日期API。
Optional类
Optional类是一种可以包含或不包含非空值的容器类。在Java之前版本中,我们经常使用null值表示缺失的返回值,但这样做肯定存在一些问题,如NullPointerException异常。Optional类是Java8中提供的关于null的解决方案。
Optional类有以下几个点需要注意:
- Optional类是final类,不能被继承。
- Optional类的实例对象可以保存null值或非null值。
- Optional类中提供了许多方法,可以处理或判断Optional实例。
Optional类方法:
(1)Optional.of(T value):返回一个包含指定非空值(T类型)的Optional类实例。
(2)Optional.empty():返回一个空的Optional类实例。
(3)Optional.ofNullable(T value):返回一个包含指定值(T类型),如果该值为空则返回一个空的Optional类实例。
(4)isPresent():如果Optional类实例中包含非空值,则返回true,否则返回false。
(5)get():返回Optional类实例中的值。如果该值为null,则会抛出NoSuchElementException异常。
(6)orElse(T other):如果Optional类实例中的值非空,则返回该值。否则,返回一个指定的默认值(T类型)。
新时间日期API
新的时间日期API(java.time包)是Java8中最受欢迎的更新之一,它是在现有的date-time API基础上构建的,解决了许多日期时间API设计上的问题。新时间日期API的实现比旧的API更为简洁,易读性更强,同时支持处理日期、时间、日期时间、时区、时差等。
新时间日期API提供了以下新类:
- LocalDate:一个不可变类,表示一个本地日期,没有时区信息。
- LocalTime:一个不可变类,表示一个本地时间,没有时区信息。
- LocalDateTime:它是LocalDate和LocalTime的组合,即本地日期时间。
- ZonedDateTime:用于表示日期和时间的完整时区信息。
- ZoneId和ZoneOffset:ZoneId用于表示特定的时区,ZoneOffset则表示与UTC偏移的时间量。
示例
示例一:Optional类的使用
下面是一个使用Optional类的示例程序:
public static void main(String[] args) {
Integer value1 = null;
Integer value2 = new Integer(5);
// Optional.ofNullable - 允许传递为null参数
Optional<Integer> a = Optional.ofNullable(value1);
// Optional.of - 如果传递的参数是null,抛出NullPointerException
Optional<Integer> b = Optional.of(value2);
System.out.println(sum(a, b));
}
public static Integer sum(Optional<Integer> a, Optional<Integer> b) {
// Optional.isPresent - 判断值是否存在
System.out.println("第一个参数值存在: " + a.isPresent());
System.out.println("第二个参数值存在: " + b.isPresent());
// Optional.orElse - 如果值存在,返回它,否则返回默认值
Integer value1 = a.orElse(new Integer(0));
// Optional.get - 获取值,值需要存在
Integer value2 = b.get();
return value1 + value2;
}
运行结果如下:
第一个参数值存在: false
第二个参数值存在: true
5
示例二:新时间日期API的使用
下面是一个使用新时间日期API的示例程序:
public static void main(String[] args) {
// 获取当前时间
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("当前时间: " + currentTime);
// 用指定的格式化器格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedTime = currentTime.format(formatter);
System.out.println("格式化后时间: " + formattedTime);
// 用指定的日期时间创建对象
LocalDate date1 = LocalDate.of(2020, Month.DECEMBER, 10);
System.out.println("date1: " + date1);
// 通过解析字符串获取日期时间对象
LocalDateTime date2 = LocalDateTime.parse("2019-08-30T10:08:00");
System.out.println("date2: " + date2);
// 获取当前时区
ZoneId currentZone = ZoneId.systemDefault();
System.out.println("当前时区: " + currentZone);
}
运行结果如下:
当前时间: 2021-02-03T21:25:42.977
格式化后时间: 2021-02-03 21:25:42
date1: 2020-12-10
date2: 2019-08-30T10:08
当前时区: Asia/Shanghai
结论
Java8的新特性Optional类和新的时间日期API是Java编程人员的福音。Optional类可以解决null值带来的常见问题,而新时间日期API再次强调了Java语言的易读性和更方便的形式化处理日期和时间。在Java8之后,Java编程将更加容易和愉快。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8新特性Optional类及新时间日期API示例详解 - Python技术站