Jdk1.6、1.7、1.8、1.9的新特性

LocalDate 本地日期

LocalDate 表示了一个确切的日期,比如 2014-03-11。该对象值是不可变的,用起来和LocalTime基本一致。下面的例子展示了如何给Date对象加减天//年。另外要注意的是这些对象是不可变的,操作返回的总是一个新实例。


代码如下:

LocalDate today = LocalDate.now();

LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS);

LocalDate yesterday = tomorrow.minusDays(2);

LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);

DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();

System.out.println(dayOfWeek);    // FRIDAY

从字符串解析一个LocalDate类型和解析LocalTime一样简单:


代码如下:

DateTimeFormatter germanFormatter =

    DateTimeFormatter

        .ofLocalizedDate(FormatStyle.MEDIUM)

        .withLocale(Locale.GERMAN);

LocalDate xmas = LocalDate.parse(“24.12.2014”, germanFormatter);

System.out.println(xmas);   // 2014-12-24

LocalDateTime 本地日期

LocalDateTime 同时表示了和日期,相当于前两节内容合并到一个对象上了。LocalDateTimeLocalTime还有LocalDate一样,都是不可变的。LocalDateTime提供了一些能访问具体字段的方法。


代码如下:

LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59);

DayOfWeek dayOfWeek = sylvester.getDayOfWeek();

System.out.println(dayOfWeek);      // WEDNESDAY

Month month = sylvester.getMonth();

System.out.println(month);          // DECEMBER

long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY);

System.out.println(minuteOfDay);    // 1439

只要附加上时区信息,就可以将其转换为一个Instant对象,Instant点对象可以很容易的转换为老式的.util.Date


代码如下:

Instant instant = sylvester

        .atZone(ZoneId.systemDefault())

        .toInstant();

Date legacyDate = Date.from(instant);

System.out.println(legacyDate);     // Wed Dec 31 23:59:59 CET 2014

格式化LocalDateTime和格式化和日期一样的,除了使用预定义好的格式外,我们也可以自己定义格式:


代码如下:

DateTimeFormatter formatter =

    DateTimeFormatter

        .ofPattern(“MMM dd, yyyy – HH:mm”);

LocalDateTime parsed = LocalDateTime.parse(“Nov 03, 2014 – 07:13”, formatter);

String string = formatter.format(parsed);

System.out.println(string);     // Nov 03, 2014 – 07:13

.text.NumberFormat不一样的是新版的DateTimeFormatter是不可变的,所以它是线程安全的。

关于时间日期格式的详细信息:https://download.java.net/jdk8/docs/api/java/time/format/DateTimeFormatter.html

十、Annotation 注解

Java 8中支持多重注解了,先看个例子来理解一下是什么意思。

首先定义一个包装类Hints注解用来放置一组具体的Hint注解:


代码如下:

@interface Hints {

    Hint[] value();

}

@Repeatable(Hints.class)

@interface Hint {

    String value();

}

Java 8允许我们把同一个类型的注解使用多次,只需要给该注解标注一下@Repeatable即可。

1: 使用包装类当来存多个注解(老方法)


代码如下:

@Hints({@Hint(“hint1”), @Hint(“hint2”)})

class Person {}

2:使用多重注解(新方法)


代码如下:

@Hint(“hint1”)

@Hint(“hint2”)

class Person {}

第二个例子里java器会隐性的帮你定义好@Hints注解,了解这一点有助于你用反射来获取这些信息:

代码如下:

Hint hint = Person.class.getAnnotation(Hint.class);

System.out.println(hint);                   // null

Hints hints1 = Person.class.getAnnotation(Hints.class);

System.out.println(hints1.value().length);  // 2

Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class);

System.out.println(hints2.length);          // 2

即便我们没有在Person类上定义@Hints注解,我们还是可以通过 getAnnotation(Hints.class) 来获取 @Hints注解,更加方便的方法是使用 getAnnotationsByType 可以直接获取到所有的@Hint注解。

另外Java 8的注解还增加到两种新的target上了:


代码如下:

@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})

@interface MyAnnotation {}

关于Java 8的新特性就写到这了,肯定还有更多的特性等待发掘。 1.8里还有很多很有用的东西,比如Arrays.parallelSort, StampedLockCompletableFuture等等。


声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Jdk1.6、1.7、1.8、1.9的新特性
本文地址:https://www.zhiletu.com/archives-4702.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

Pages: 1 2 3 4 5 6 7 8 9
上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!