不少人抱怨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