var 是 Java10 版本中新出的特性,用它来定义局部变量。var 不是关键字,至关于一种动态类型,编译器根据变量所赋的值来推断类型。因此必须在定义变量的时候赋初始值。java
@Test public void testJDK10VarLocalVariable(){ var num1 = 1000; var num2 = 1.001; var str = "hello var"; var list = new ArrayList<>(); var map = new HashMap<>(); } @Test public void testNoramlVariable(){ int num1 = 1000; double num2 = 1.001; String str = "hello var"; List list = new ArrayList<>(); Map map = new HashMap(); }
在咱们平常的工做中,有时候须要用到一大段的字符串,这些字符串须要换行,须要排版,须要转义。在一个文本编辑器中,这固然是很是容易的事情。可是在 java 代码中,就是一个噩梦了。而新的文本块使用"""这个符号,进行拼接。编程
@Test public void testNormalString(){ String text = "{" + "\n" +" \"username\": \"lengleng\",\n" +" \"password\": \"123456\" \n" +"}"; System.out.println(text); } @Test public void testNewJdk13TextBlock(){ var text = """ { "username": "lengleng", "password": "123456" } """; System.out.println(text); }
@Test public void testNormalSwitch() { int day = 2; switch (day) { case 1: case 2: case 3: case 4: case 5: System.out.println("workday"); case 6: case 7: System.out.println("weekend"); default: System.out.println("invalid"); } }
@Test public void testNormal(){ List<String> fruitsTmp = new ArrayList<>(); fruitsTmp.add("apple"); fruitsTmp.add("banana"); fruitsTmp.add("orange"); Map<Integer, String> numbersTmp = new HashMap<>(); numbersTmp.put(1, "one"); numbersTmp.put(2, "two"); numbersTmp.put(3, "three"); }
@Test public void testNewJdk9() { var fruits = List.of("apple", "banana", "orange"); var numbers = Map.of(1, "one", 2, "two", 3, "three"); }
Records 的目标是扩展 Java 语言语法,Records 为声明类提供了一种紧凑的语法,用于建立一种类中是“字段,只是字段,除了字段什么都没有”的类。经过对类作这样的声明,编译器能够经过自动建立全部方法并让全部字段参与 hashCode()等方法。干掉 lombok 只须要经过 record 声明便可完成实体字段的 get 和构造器方法。app
public record Demo(String username, String password) { } @Test public void testJdk15Record() { var demo = new Demo("lengleng", "123456"); System.out.println(demo.password()); System.out.println(demo.username()); }
Java8 带来了许多改变,其中之一就是 default 修饰的接口方法。这些方法改变了咱们已知的接口,如今咱们可以在接口中定义默认实现方法。若是你大量使用 default 方法在你的应用接口中,如今能够经过 JDK9 的接口私有方法来重构。编辑器
public interface PrivateInterface { private void printF(){ System.out.println("lengleng"); } default void getPassword(){ printF(); System.out.println("123456"); } } @Test public void testGetPassword() { var privateInterface = new PrivateInterfaceImpl(); privateInterface.getPassword(); }
可扩展性不是面向对象编程的一个重要指标吗?为何要限制可扩展性呢?其实,面向对象编程的最佳实践之一,就是要把可扩展性的限制在能够预测和控制的范围内,而不是无限的可扩展性。工具
public sealed interface Pet permits Cat { }
分配权限的子类能够正常的实现此接口开发工具
public final class Cat implements Pet { }