Java 10 的 10 个新特性,将彻底改变你写代码的方式
Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了。。 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10…… 刚学Java的同学是不是感觉一脸蒙逼?!!! 就连我这个老司机也同样感觉如此! Java 更新越来越快,我们做技术的也要跟上步伐,不然总会慢别人一拍,这新东西从国外到国内应用一般要好几年的时间,如果我们提前了解并应用这些新技术对自己不是坏事。 Java 10的新特性说了这么多,看Java 10都会有哪些特性来改变我们写代码的方式呢?! 1.局部变量类型推断局部变量类型推断可以说是Java 10中最值得注意的特性,这是Java语言开发人员为了简化Java应用程序的编写而采取的又一步,如下图所示。 这个新功能将为Java增加一些语法糖 - 简化它并改善开发者体验。新的语法将减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺。 局部变量类型推断将引入”var”关键字,也就是你可以随意定义变量而不必指定变量的类型,如: List <String> li...
Java 11 已发布,String 还能这样玩
在文章《Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码》中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来讲。 Java 11 增加了一系列的字符串处理方法,如以下所示。 // 判断字符串是否为空白 " ".isBlank(); // true // 去除首尾空格 " Javastack ".strip(); // "Javastack" // 去除尾部空格 " Javastack ".stripTrailing(); // " Javastack" // 去除首部空格 " Javastack ".stripLeading(); // "Javasta...
Java 12 骚操作, String居然还能这样玩
Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! Java 12 已经发布数月了:Java 12 正式发布,8大新特性!,今天我再来分享下在 Java 12 中关于 String 的三个骚操作,绝逼有用。 更多关于 Java 的资讯、干货教程、以及好消息,请关注,第一时间推送。 坐稳了,准备起飞! 1、transformtransform:即字符串转换,来看下 transform 的实现源码: public <R> R transform(Function<? super String, ? extends R> f) { return f.apply(this); } 传入一个函数式接口 Function,接受一个值,返回一个值,参考:Java 8 新特性之函数式接口。 废话少说,直接上手就是干: private static void testTransform() { System.out.println("===...
Java 11 正式发布,这 8 个新特性教你写出更牛逼的代码
美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。 为什么说是长期版本,看下面的官方发布的支持路线图表。 可以看出 Java 8 扩展支持到 2025 年,而 Java 11 扩展支持到 2026 年。 现在大部分都在用 Java 8,Java 9 和 10 目前很少有人在用,至少我没有发现有公司在生产环境应用的,那就是找死。 现在 Java 11 长期支持,也已经包含了 9 和 10 的全部功能,9 和 10 自然就活到头了。。 那么我们来看下 从 Java 9 - 11 都有哪些重要的新特性呢? 1、本地变量类型推断这个博主已经写过一篇文章,详细的介绍了 Java 10 带来的这个新特性。 什么是局部变量类型推断? var javastack = "javastack"; System.out.println(javastack); 大家看出来了,局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型,如上面的 Stri...
Java 12 骚操作, switch居然还能这样玩!
Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! 那么在 Java 12 中可以怎样玩 switch? 先来定义一个枚举类: public enum Status { OPEN, INIT, PROCESS, PENDING, CLOSE; } Java 12 之前是这样用的: private static void testSwitch1(Status status) { int result = 0; switch (status) { case OPEN: result = 1; break; case PROCESS: result = 2; break; case PENDING: result = 2; break; ...
Java 12 骚操作, 文件比对居然还能这样玩!
Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! 之前分享了一些 Java 12 的骚操作,今天继续,今天要分享的是 Java 12 中的文件比对骚操作。 我们或多或少会遇到这样的需求:怎么比对两个文件中的内容一样? 你会把两个文件中的内容拉出来一个个字符对比,然后提交一大堆不怎么优雅的代码? 这样你就太 OUT 了! 在 Java 12 中,仅需要 1 行代码即可搞定! 来看示例代码: public static void main(String[] args) throws IOException { Path dir = Paths.get("d:/"); Path path1 = dir.resolve("javastack1.txt"); Path path2 = dir.resolve("javastack2.txt"); long result = Files.mi...
Java9 简化流关闭新姿势
做Java开发的都知道,每个资源的打开都需要对应的关闭操作,不然就会使资源一直占用而造成资源浪费,从而降低系统性能。 关于资源的关闭操作,从JDK7-JDK9有了不少的提升及简化。 JDK6在JDK6及之前,每个资源都需要我们手动写代码关闭,如: FileInputStream fis = null; byte[] buffer = new byte[1024]; try { fis = new FileInputStream(new File("E:\\Java技术.txt")); while (fis.read(buffer) > 0) { System.out.println(new String(buffer)); } } catch (Exception e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.cl...
Java8 之新特性扩展篇
之前分篇章讲了一些JKD8中添加的新特性,还有一些新特性这里也一并讲下。 BASE64base64编码解码已经被加入到了jdk8中了。 import java.nio.charset.StandardCharsets; import java.util.Base64; public class Base64Test { public static void main(String[] args) { String text = "hello javastack"; String encoded = Base64.getEncoder().encodeToString(text.getBytes(StandardCharsets.UTF_8)); System.out.println(encoded); String decoded = new String(Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8); Sy...
JJava8 新特性之Optional
Optional是什么java.util.Optional Jdk8提供Optional,一个可以包含null值的容器对象,可以用来代替xx != null的判断。 Optional常用方法ofpublic static <T> Optional<T> of(T value) { return new Optional<>(value); } 为value创建一个Optional对象,如果value为空则 会报出NullPointerException异常。 ofNullablepublic static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); } 为value创建一个Optional对象,但可以允许value为null值。 isPresentpublic boolean isPresent() { ...
Java8 新特性之Lambda表达式
什么是Lambda表达式Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。 Lambda语法一行执行语句的写法: (parameters) -> expression 如果有多行执行语句,可以加上{} (parameters) -> { statements; } 如: public int add(int x, int y) { return x + y; } 转换成Lambda表达式有以下几种写法: // 指定参数类型及return (int x, int y) -> { return x + y; } // 指定参数类型,不指定return (int x, int y) -> x + y; // 不指定参数类型和return,编译器会自动推断 (x, y) -> x + y; Lambda用途1、只有一个抽象...
