小滴课堂-学习笔记:(2)Java高级核心玩转JDK8新特性之接口和日期处理

56 篇文章 0 订阅
20 篇文章 0 订阅

logo 愿景:"让编程不再难学,让技术与生活更加有趣"


更多架构课程请访问 xdclass.net

 

目录

第1集 Java新特性玩转JDK8之default关键字

第2集 Java新特性玩转JDK8之新增base64加解密API

第3集 Java新特性玩转JDK8之时间日期处理类上集

第4集 Java新特性玩转JDK8之时间日期处理类下集

第5集 Java新特性玩转JDK8之Optional类

干货文档


第1集 Java新特性玩转JDK8之default关键字

简介:讲解jdk8新特性default关键字

  • 创建一个java基础项目

  • 在jdk1.8以前接口里面是只能有抽象方法,不能有任何方法的实现的

  • jdk1.8里面打破了这个规定,引入了新的关键字default,使用default修饰方法,可以在接口里面定义具体的方法实现

  • 默认方法: 接口里面定义一个默认方法,这个接口的实现类实现了这个接口之后,不用管这个default修饰的方法就可以直接调用,即接口方法的默认实现

    public interface Animal {
    ​
      void run();
    ​
      void eat();
    ​
      default void breath(){
          System.out.println("使用氧气呼吸");
      }
    }

     

  • 静态方法: 接口名.静态方法来访问接口中的静态方法

    public interface Animal {
    ​
      void run();
    ​
      void eat();
    ​
      default void breath(){
          System.out.println("使用氧气呼吸");
      }
    ​
      static void test(){
          System.out.println("这是静态方法");
      }
    }
    ​
    

     

 

第2集 Java新特性玩转JDK8之新增base64加解密API

简介:讲解jdk1.8新增Base64 api

  • 什么是Base64编码 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法 基于64个字符A-Z,a-z,0-9,+,/的编码方式,是一种能将任意二进制数据用64种字元组合成字符串的方法,而这个二进制数据和字符串资料之间是可以互相转换的,在实际应用上,Base64除了能将二进制数据可视化之外,也常用来表示字串加密过后的内容

    推荐一个文章:https://blog.csdn.net/wo541075754/article/details/81734770

  • 早期java要使用Base64怎么做

    • 使用JDK里sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类

           BASE64Encoder encoder = new BASE64Encoder();
           BASE64Decoder decoder = new BASE64Decoder();
           String text = "小滴课堂";
           byte[] textByte = text.getBytes("UTF-8");
          //编码
           String encodedText = encoder.encode(textByte);
           System.out.println(encodedText);
          //解码
          System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));
      ​
      缺点:编码和解码的效率比较差,公开信息说以后的版本会取消这个方法

       

    • Apache Commons Codec有提供Base64的编码与解码 缺点:是需要引用Apache Commons Codec

  • jdk1.8之后怎么玩?(首选推荐)

    • Jdk1.8的java.util包中,新增了Base64的类

    • 好处:不用引包,编解码销量远大于 sun.misc 和 Apache Commons Codec

     Base64.Decoder decoder = Base64.getDecoder();
        Base64.Encoder encoder = Base64.getEncoder();
        String text = "小滴课堂";
        byte[] textByte = text.getBytes("UTF-8");
        //编码
        String encodedText = encoder.encodeToString(textByte);
        System.out.println(encodedText);
        //解码
        System.out.println(new String(decoder.decode(encodedText), "UTF-8"));
    

     

 

 

 

第3集 Java新特性玩转JDK8之时间日期处理类上集

简介:讲解jdk8之后处理时间的api

  • 时间处理再熟悉不过,SimpleDateFormat,Calendar等类 旧版缺点: java.util.Date 是非线程安全的 API设计比较差,日期/时间对象比较,加减麻烦

  • Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理

    • 新增了很多常见的api,如日期/时间的比较,加减,格式化等

    • 包所在位置 java.time

    • 核心类

      LocalDate:不包含具体时间的日期。
      ​
      LocalTime:不含日期的时间。
      ​
      LocalDateTime:包含了日期及时间。

       

    • LocalDate 常用API

      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    比较两个日期对象是否相等

       

    • LocalTime 常用API

    • LocalDateTime 常用API

 

 

第4集 Java新特性玩转JDK8之时间日期处理类下集

简介:讲解jdk8之后处理时间的api

  • 日期时间格式化

    • JDK8之前:SimpleDateFormat来进行格式化,但SimpleDateFormat并不是线程安全的

    • JDK8之后:引入线程安全的日期与时间DateTimeFormatter

    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);
    ​

     

  • 获取指定的日期时间对象

    LocalDateTime ldt = LocalDateTime.of(2020, 11, 11, 8, 20, 30);
    System.out.println(ldt);

     

  • 计算日期时间差 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());//两个时间差的纳秒数

 

第5集 Java新特性玩转JDK8之Optional类

简介:讲解jdk8新增的Optional类

  • Optional 类有啥用

    • 主要解决的问题是空指针异常(NullPointerException)

    • 怎么解决?

      • 本质是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空

  • 创建Optional类

    • of()

      • null 值作为参数传递进去,则会抛异常

        Optional<Student> opt = Optional.of(user);
        

         

    • ofNullable()

      • 如果对象即可能是 null 也可能是非 null,应该使用 ofNullable() 方法

      Optional<Student> opt = Optional.ofNullable(user);
      

       

  • 访问 Optional 对象的值

    • get() 方法

      Optional<Student> opt = Optional.ofNullable(student);
      Student s = opt.get();

       

    • 如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象一般使用get之前需要先验证是否有值,不然还会报错

      public static void main(String[] args) {
              Student student = null;
              test(student);
      }
      ​
      public static void  test(Student student){
              Optional<Student> opt = Optional.ofNullable(student);
              System.out.println(opt.isPresent());
      ​
      }

       

  • 兜底 orElse方法

    • orElse()如果有值则返回该值,否则返回传递给它的参数值

      Student student1 = null;
      Student student2 = new Student(2);
      Student result = Optional.ofNullable(student1).orElse(student2);
      System.out.println(result.getAge());
      Student student = null;
      int result = Optional.ofNullable(student).map(obj->obj.getAge()).orElse(4);
      System.out.println(result);

       

干货文档

                                                        关注公众号发送:“CSDN干货文档”  即可领取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dev666

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值