Java8 vs Java11

Reference: 原文地址

目前市场上主流的稳定版当然还得属Java 8和Java 11,而目前大部分公司的生产环境还是Java 8居多。
所以如果从自学角度出发,我觉得这两个版本都OK,其他中间的一些比如Java 9、Java 10这些非稳定版就不用考虑了。
[Java11]vs Java8

Java 11相对于Java 8确实有一部分进化,除了有很多内部的升级(比如开销和时延更低的GC、TLS1.3加持等等)之外,对于初学使用者来说也有一些语言使用层面的进化。
变量类型

新版Java引入了一个全新的动态类型关键字var,用var来定义的局部变量不用写具体类型,编译器能根据=右边的实际赋值来自动推断出变量的类型

var name = "lukis-tsai";
var list = List.of("lukis", "tsai", "handsome");
// var 在for循环更加简单,在处理一些复杂的结构时也更简洁,如: List<List<String>>
for(var item : list) {
    System.out.println(item);
}

1 var只能在方法里定义,不允许定义类的成员变量

2 var定义的变量需要初始化,一旦赋值后,重新赋不同类型的值是不行的

3 var每次只能定义一个变量,不能复合声明变量
官方HTTP Client加持

现在java11自带HTTP Client了,位于java.net.http包下,支持发送同步、异步的HTTP请求

同步请求:

var request = HttpRequest.newBuilder()
        .uri( URI.create("https://blog.csdn.net") )
        .GET()
        .build();

// 同步请求方式,拿到结果前会阻塞当前线程

var httpResponse = HttpClient.newHttpClient()
        .send( request, HttpResponse.BodyHandlers.ofString());

异步请求

CompletableFuture<String> future = HttpClient.newHttpClient().
        sendAsync( request, HttpResponse.BodyHandlers.ofString() )
        .thenApply( HttpResponse::body );
System.out.println("摸鱼划水喝茶....");
future.get();

String处理增强
新版字符串String类型增加了诸如:isBlank()、strip()、repeat()等方便的字符串处理方法

String myName = " lukis-tsai ";
 
System.out.println( "  ".isBlank()); // true
System.out.println( "  ".isEmpty()); // false
 
System.out.println( myName.strip());         // 去除空格
System.out.println( myName.stripLeading());  // 去除左空格
System.out.println( myName.stripTrailing() ); // 去除右空格
System.out.println( myName.repeat(2));       //  lukis-tsai  lukis-tsai

集合增强
主要是增加了诸如of()和copyOf()等方法用于更加方便的创建和复制集合类型

var list = List.of( "lukis", "tsai", "handsome" );
var conpyList = List.copyOf(list);
System.out.println(list);     // 打印 [lukis, tsai, handsome]
System.out.println(conpyList); // 打印 [lukis, tsai, handsome]
 
var set = Set.of("lukis","tsai");
var copySet = Set.copyOf(set);
System.out.println(set);      // 打印 [lukis, tsai]
System.out.println(conpySet);  // 打印 [lukis, tsai]
 
var map = Map.of("lukis","handsome","huahua","pretty");
var conpyMap = Map.copyOf(map);
System.out.println(map);      // 打印 {lukis=handsome, huahua=pretty}
System.out.println(copyMap);  // 打印 {lukis=handsome, huahua=pretty}

函数式编程增强
例如Stream 流增加了诸如takeWhile()和dropWhile()的截止结算方法

var list = List.of( "lukis", "huahua", "kimi" );
 
// 从集合中依次删除满足条件的元素,直到不满足条件为止
var subList = list.stream()
        .dropWhile( item -> item.equals("kimi") )
        .collect(Collectors.toList());
System.out.println(subList);  // 打印 ["lukis", "kimi"]
 
// 从集合中依次获取满足条件的元素,知道不满足条件为止
var subList1 = list.stream()
        .takeWhile( item -> item.equals("huahua") )
        .collect(Collectors.toList());
System.out.println( upListSub2 ); // 打印 ["huahua"]

文件读写增强
1、Files类增强
心心念的直接能把文件内容读取到String以及String回写到文件的功能终于支持了,可以通过Files类的静态方法writeString()和readString()完成

Path path = Paths.get("/Users/lukis/test.txt");
String content = Files.readString(path, StandardCharsets.UTF_8);
System.out.println(content);
Files.writeString( path, "王老七", StandardCharsets.UTF_8 );

2、InputStream增强
InputStream则增加了一个transferTo()方法,直接将数据丢到OutputStream去:

InputStream inputStream = new FileInputStream( "/Users/lukis/test.txt" );
OutputStream outputStream = new FileOutputStream( "/Users/lukis/test2.txt" );
inputStream.transferTo( outputStream );

支持源文件直接运行
这时候可以直接用java指令去运行Java源文件,直接省去以前javac编译源文件的过程

java HelloWorld.java
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容