JDK的笔记 - JDK8的接口和日期

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-03 06:56:53

1.jdk8的关键字default和static关键字:jdk8中,可以用default关键字来修饰接口中的方法,这样其继承类就无需实现该方法;其次static关键字也能用在接口中;
动物类的代码:

package com.example.demo.jdk8;

public interface Animal {
    void eat();

    default void sleep() {
        System.out.println("sleep");
    }

    static void run() {
        System.out.println("run");
    }
}

猫类的代码:

package com.example.demo.jdk8;

public class Cat implements Animal{
    @Override
    public void eat() {
        System.out.println("cat is eating");
    }
}

测试代码:

package com.example.demo.jdk8;

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat();
        cat.sleep();
        Animal.run();
    }
}

运行结果:

cat is eating
sleep
run

2.BASE64加解密:可以将二进制字符串转换成8bit来进行传输,直接在java.util包下,引用时不用导入依赖,而且加解密速度快
代码测试:

package com.example.demo.jdk8;


import java.io.UnsupportedEncodingException;
import java.util.Base64;

public class Base64Test {
    public static void main(String[] args) throws UnsupportedEncodingException {
        Base64.Encoder encoder = Base64.getEncoder();
        Base64.Decoder decoder = Base64.getDecoder();

        String string = "Base64测试加解密";

        byte[] bytes = string.getBytes("UTF-8");
        String encodeToString = encoder.encodeToString(bytes);
        byte[] decode = decoder.decode(encodeToString);
        String decodeString = new String(decode, "UTF-8");

        System.out.println(encodeToString);
        System.out.println(decodeString);
    }
}

测试结果

QmFzZTY05rWL6K+V5Yqg6Kej5a+G
Base64测试加解密

3.日期类处理:在java.time包下面,线程安全,提供日期比较、加减等常用操作
三个核心类:
LocalDate:不包含具体时间的⽇期
LocalTime:不含⽇期的时间
LocalDateTime:包含了⽇期及时间

代码测试

package com.example.demo.jdk8;

import java.time.LocalDate;

public class DateTest {
    public static void main(String[] args) {
        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 ⽐较两个⽇期对象是否相等
    }
}

运行结果:

今天⽇期:2020-03-02
现在是哪年:2020
现在是哪⽉:MARCH
现在是哪⽉(数字):3
现在是⼏号:2
现在是周⼏:MONDAY
加后是哪年:2021
旧的是哪年:2020
isAfter: true

时间格式化类:DateTimeFormatter
计算⽇期时间差:Duration
测试代码:

package com.example.demo.jdk8;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTest {
    public static void main(String[] args) {
        // 格式化时间
        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);
        System.out.println("--------------------------");

        // 获取指定的⽇期时间对象
        LocalDateTime ldt1 = LocalDateTime.of(2020, 11, 11, 8, 20, 30);
        System.out.println(ldt1);
        System.out.println("--------------------------");

        // 计算⽇期时间差 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());//两个时间差的纳秒数
        System.out.println("--------------------------");
    }
}

运行结果:

2020-03-02T13:37:47.079
2020-03-02 13:37:47
--------------------------
2020-11-11T08:20:30
--------------------------
2020-03-02T13:37:47.099
2020-10-01T10:40:30
212
5109
306542
18392562901
18392562901000000
--------------------------

4.Optional是一个用于解决NullPointerException的包装类
测试代码:

package com.example.demo.jdk8;

import java.util.Optional;

public class OptionalTest {
    public static void main(String[] args) {
        Card card = null;
        // of不能传入null,不然会报 java.lang.NullPointerException 的错
        //Optional<Card> optionalCard = Optional.of(card);

        // 传入null不会报错
        Optional<Card> optionalCard1 = Optional.ofNullable(card);
        if(optionalCard1.isPresent()){
            Card card1 = optionalCard1.get();
            System.out.println(card1);
        }else {
            System.out.println("card对象为null");
        }
    }
}

测试结果:

card对象为null

注:本文是基于小滴课堂的笔记总结,链接如下:
小滴课堂官网

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!