不少人抱怨Java是一种强类型,须要引入大量的样板代码。甚至在这些状况下,给定好变量名,一般很清楚发生了什么,明显类型声明每每被认为是没必要要的。许多流行的编程语言都已经支持某种形式的局部变量类型推断:如C++ (auto), C# (var), Scala (var/val), Go (declaration with :=)等。javascript
JDK10 可使用var做为局部变量类型推断标识符,此符号仅适用于局部变量,加强for循环的索引,以及传统for循环的本地变量;它不能使用于方法形式参数,构造函数形式参数,方法返回类型,字段,catch形式参数或任何其余类型的变量声明。html
标识符var不是关键字;相反,它是一个保留的类型名称。这意味着var用做变量,方法名或则包名称的代码不会受到影响;但var不能做为类或则接口的名字(但这样命名是比较罕见的,由于他违反了一般的命名约定,类和接口首字母应该大写)。java
参考一下示例:算法
var str = "ABC"; //根据推断为 字符串类型 var l = 10L;//根据10L 推断long 类型 var flag = true;//根据 true推断 boolean 类型 var flag1 = 1;//这里会推断boolean类型。0表示false 非0表示true var list = new ArrayList<String>(); // 推断 ArrayList<String> var stream = list.stream(); // 推断 Stream<String>
移除Native-Header Generation Tool (javah)
JDK10 从JDK中移除了javah 工具。该工具已被JDK8 (JDK-7150368)中添加javac高级功能所取代。此功能提供了在编译java源代码时编写本机头文件的功能,从而无需使用单独的工具。shell
JDK10中包含许多对JVM的优化:编程
Java的改进提议被称为JEP(JDK Enhancement Proposal 特性加强提议),JDK11是Java改成6月一版以后的第一个LTS版本。segmentfault
JDK9中便引入httpclient模块,但它在jdk.incubator.httpclient包下,在java11被标记为正式,改成java.net.http模块。api
java Haha.java直接输出javac Haha.java &&java Haha
的结果。app
Nashorn被废弃,GraalVM为推荐引擎。编程语言
String text = " \u2000a b "; Assert.assertEquals("a b",text.strip()); Assert.assertEquals("\u2000a b",text.trim()); Assert.assertEquals("a b ",text.stripLeading()); Assert.assertEquals(" \u2000a b",text.stripTrailing());
trim()和strip()的区别
jshell> var aaa = fullSpace + "aaa" + fullSpace aaa ==> " aaa " jshell> aaa.strip() $14 ==> "aaa" jshell> aaa.trim() $15 ==> " aaa "
字符串实例方法,使用专门的 Spliterator 来懒惰地提供源字符串中的行
jshell> "test\nhoge\n".lines().map(String::toUpperCase).toArray() $11 ==> Object[2] { "TEST", "HOGE" }
按照参数 int 提供的次数来重复字符串的运行次数
jshell> "test".repeat(3) $7 ==> "testtesttest"
验证当前字符串是否为空,或者是否只包括空白字符(空白字符由 Character.isWhiteSpace(int) 验证)
jshell> var halfSpace = "\u0020" halfSpace ==> " " jshell> halfSpace.isBlank() $11 ==> true jshell> var fullSpace = "\u3000" fullSpace ==> " " jshell> fullSpace.isBlank() $13 ==> true
of(String, String...)
此前咱们须要使用 Paths.get()。如今,咱们像其余类同样使用 of()。
writeString(Path, CharSequence)
咱们可使用该方法来保存一个 String 字符串。
jshell> Files.writeString(Path.of("test.txt"), "Hello!!!") $3 ==> test.txt readString(Path)
咱们可使用该方法来读取一个 String 字符串。
jshell> Files.readString(Path.of("test.txt")) $4 ==> "Hello!!!"
nullReader()
使用该方法,咱们能够获得一个不执行任何操做的 Reader。
nullWriter()
使用该方法,咱们能够获得一个不执行任何操做的 Writer。
nullInputStream()
使用该方法,咱们能够获得一个不执行任何操做的 InputStream。
nullOutputStream()
使用该方法,咱们能够获得一个不执行任何操做的 OutputStream。
import java.io.IOException; import static java.util.Calendar.*; class Haha { public static void main(String[] args) throws IOException, InterruptedException { var day = 2; switch (day) { case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURDAY -> System.out.println(8); case WEDNESDAY -> System.out.println(9); } } }
switch也能够用做语句
System.out.println(switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; default -> -1; });
var cnf = NumberFormat.getCompactNumberInstance(Locale.CHINA, NumberFormat.Style.SHORT); System.out.println(cnf.format(1_0000)); System.out.println(cnf.format(1_9200)); System.out.println(cnf.format(1_000_000)); System.out.println(cnf.format(1L << 30)); System.out.println(cnf.format(1L << 40)); System.out.println(cnf.format(1L << 50)); System.out.println(NumberFormat.getCompactNumberInstance(Locale.CHINA, NumberFormat.Style.SHORT).format(12345)); System.out.println(NumberFormat.getCompactNumberInstance(Locale.CHINA, NumberFormat.Style.LONG).format(12345));
transform
java @Test public void testStringTransform(){ System.out.println("hello".transform(new Function<String, Integer>() { @Override public Integer apply(String s) { return s.hashCode(); } })); }
indent
@Test public void testStringIndent(){ System.out.println("hello".indent(3)); }
JDK12放弃了对jdk6及其之前版本的支持。
https://www.cnblogs.com/peter1018/p/9234490.html https://segmentfault.com/a/1190000016527932 https://www.oschina.net/news/98314/java-11-api-changes-so-far