愿景:"让编程不再难学,让技术与生活更加有趣"
更多架构课程请访问 xdclass.net
目录
第2集 Java新特性玩转JDK8之新增base64加解密API
第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干货文档” 即可领取