JDK1.7和JDK1.8版本的新特性

一.JDK1.7版本的新特性

1.二进制字面量

2.数字字面量可以出现下划线

3.switch 语句可以用字符串

二.JDK1.8版本的新特性

1.新特性一:新增的日期时间相关类 

LocalDate、 LocalTime、 LocalDateTime类​

Instant 时间戳类​

Duration类和Period类​

TemporalAdjuster时间矫正器​

DateTimeFormatter解析和格式化日期或时间的类​

ZoneID 世界时区类​

2.特性二:Lambda表达式

Lambda表达式的书写语法​

匿名内部类的Lambda表达式简化规则​

Lambda表达式可作为参数传递​

Lambda表达式的另一种写法, 方法引用​

构造器引用​

3 .特性三:Stream流

Stream 的操作三个步骤

创建Stream的方式   

Stream 的中间操作

Stream 的终止操作


一.JDK1.7版本的新特性

1.二进制字面量

        JDK7开始,可以  用二进制来表示整数 (byte,short,int和long)。使用二进制字面量的好处是可以使代码更容易被理解。语法非常简单,只要在二进制数值前面加 0b或者0B,   例:  int x = 0b110110.

2.数字字面量可以出现下划线

        为了增强对数值的阅读性,如我们经常把数据用逗号分隔一样。JDK7提供了  _对数据分隔  。注意事项:不能出现在进制标识和数值之间 / 不能出现在数值开头和结尾 / 不能出现在小数点旁边.  例:int x = 100_1000;

3.switch 语句可以用字符串

public class Test {
    public static void main(String[] args) {
        String s="HELLO";
        switch (s){
            case "a":
                System.out.println("a");
                break;
            case "HELLO":
                System.out.println("HELLO");
                break;
        }
    }
}

还有一个泛型简化的特性


二.JDK1.8版本的新特性

1.新特性一:新增的日期时间相关类 

LocalDate、 LocalTime、 LocalDateTime类

        LocalDate、 LocalTime、 LocalDateTime类的实例是不可变的对象, 分别表示使用 ISO-8601日历系统的  日期、时间、日期和时间。  它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。 注: ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法 这些新增的日期时间API都在 java.time包下

获取对象的方法

  • 方式1通过静态方法  now();     例如:LocalDateTime ldt = LocalDateTime.now();
  • 方式2通过静态方法of()方法参数可以指定年月日时分秒;        例如:LocalDateTime of =LocalDateTime.of(2018, 12, 30, 20, 20, 20);

常用方法

  • ldt.getYear();                                                                            //获取年
  • ldt.getMinute();                                                                        //获取分钟
  • ldt.getHour();                                                                           //获取小时
  • getDayOfMonth                                                                       //获得月份天数(1-31)
  • getDayOfYear                                                                          //获得年份天数(1-366)
  • getDayOfWeek                                                                        //获得星期几(返回一个 DayOfWeek枚举值)
  • getMonth                                                                                 //获得月份, 返回一个 Month 枚举值
  • getMonthValue                                                                        //获得月份(1-12)
  • getYear                                                                                    //获得年份
  • format()                                                                                    //格式化日期日期字符串的方法    例如:String yyyy = ldt.format(DateTimeFormatter.ofPattern("yyyy"));
  • toLocalDate();    /   toLocalTime();                                           //转换的方法       例如:LocalDate localDate = ldt.toLocalDate();            例如:LocalTime localTime = ldt.toLocalTime();   
  • isAfter()                                                                                    //判断一个日期是否在指定日期之后        例如:  boolean after = ldt.isAfter(LocalDateTime.of(2024, 1, 1, 2, 3));
  • isBefore()                                                                                 //判断一个日期是否在指定日期之前        
  • isEqual()                                                                                   //判断两个日期是否相同
  • isLeapYear()                                                                             //判断是否是闰年注意是LocalDate类中的方法          例如  boolean b= LocalDate.now().isLeapYear();
  • parse("2007-12-03T10:15:30");                                                //将一个日期字符串解析成日期对象,注意字符串日期的写法的格式要正确,否则解析失败.  注意细节:如果用LocalDateTime 想按照我们的自定义的格式去解析,注意日期字符串的 年月日时分秒要写全,不然就会报错          例如:LocalDateTime parse = LocalDateTime.parse("2007-12-03T10:15:30");
  • plusYears(); / plusMonths(); / .......                                             //添加年月日时分秒的方法 plus系列的方法 都会返回一个新的LocalDateTime的对象           例如:LocalDateTime localDateTime = ldt.plusYears(1);
  • minusYears(); / minusMonths(); / .......                                       //减去年月日时分秒的方法 minus 系列的方法 注意都会返回一个新的LocalDateTime的对象         例如:LocalDateTime localDateTime2 = ldt.minusYears(8);
  • withYears(); / withMonths(); / .......                                              //指定年月日时分秒的方法 with系列的方法 注意都会返回一个新的LocalDateTime的对象          例如 LocalDateTime localDateTime3 = ldt.withYear(1998);

Instant 时间戳类

  • Instant ins = Instant.now();                 //获取对象的方法 now(),   注意默认获取出来的是当前的美国时间和我们的北京时间相差八个小时
  • atOffset()                                            //设置偏移量     例如:OffsetDateTime time = ins.atOffset(ZoneOffset.ofHours(8));
  • ZoneId.systemDefault()                     //获取本地的默认时区ID
  • atZone()                                             //获取系统默认时区时间的方法,其参数是要一个时区的编号, 可以通过时区编号类获取出来       例如: ZonedDateTime zonedDateTime = ins.atZone(ZoneId.systemDefault());
  • getEpochSecond()                             //获取从1970-01-01 00:00:00到当前时间的秒值     例如:long epochSecond = ins.getEpochSecond();//获取从1970-01-01 00:00:00到当前时间的秒值
  • toEpochMilli()                                     //获取从1970-01-01 00:00:00到当前时间的毫秒值
  • getNano()                                           //方法是把获取到的当前时间的秒数 换算成纳秒     例如:当前时间是2018-01-01 14:00:20:30 , 那就把30豪秒换算成纳秒 int nano = ins.getNano()
  • ofEpochSecond()                               //给计算机元年增加秒数     例如:Instant instant = Instant.ofEpochSecond(5);
  • ofEpochMilli()                                     //给计算机元年增加毫秒数     补充:单位换算    0.1 毫秒 = 10 的5次方纳秒 = 100000 纳秒       1 毫秒 = 1000 微妙 = 1000000 纳秒

Duration类和Period类

Duration 是用于  计算两个“时间”间隔  的类, 而 Period 是用于  计算两个“日期”间隔  的类 .   

Duration类常用的方法如下:

  • between()                                                   //计算两个时间的间隔,默认是秒     例如:Duration between = Duration.between(start, end);
  • toMillis()                                                     //将秒转成毫秒

Period类计算两个日期之间的间隔的代码如下:

LocalDate s = LocalDate.of(1985, 03, 05);
	LocalDate now = LocalDate.now();
	Period be = Period.between(s, now);
	System.out.println(be.getYears());间隔了多少年
	System.out.println(be.getMonths());间隔了多少月
	System.out.println(be.getDays());间隔多少天

TemporalAdjuster时间矫正器

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

naoguaziteng

谢谢友友的打赏!一起努力吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值