JAVA 11初体验

  随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场。在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进。

  作为一名一线的开发人员,JAVA 11给我们带来哪些便利之处呢?下面我们来体验一下。

一、在Lambda表达式中使用var

  本地变量类型var是java 10提出的新概念,它可以从上下文中推断出本地变量的类型,从而提高代码可读性。 我们看看下面的例子:

public class Main {
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.oracle.com/");
URLConnection conn = url.openConnection();
Reader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
}
}

  使用var声明后,上面的代码可以改写成:

public class Main {
public static void main(String[] args) throws Exception {
var url = new URL("http://www.oracle.com/");
var conn = url.openConnection();
var reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
}
}

  我们使用var代替了URL、URLConnection、Reader,提高了代码的可读性,也方便了开发。 但是在JAVA 10中,var变量不能在lambda表达式中声明,在JAVA 11中,解决了这个问题。 我们可以在lambda表达式中使用var,如下:

(var x, var y) -> x.process(y)

上面的例子等同于

(x, y) -> x.process(y)

但是我们不能混合使用,下面的两个例子都是错误的:

//含蓄型的lambda表达式中,要么全使用var,要么全不使用var
(var x, y) -> x.process(y) //在lambda表达式中,不能即使用含蓄型,又使用明确型
(var x, int y) -> x.process(y)

二、标准化HTTP Client API

  以前我们在程序中使用HttpClient时,通常会引入apache的HttpClient工具包。在JAVA 11中,我们可以使用JDK原生的 HttpClient了。

public class HttpTest {
public static void main(String[] args) throws Exception {
String uri = "http://www.baidu.com"; HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(uri))
.build(); HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
}
}

  上面的例子是同步的get请求,还有其他的方法HttpClient也是提供的,例如:

  • 异步get
  • post提交
  • 并发请求
  • Get Json
  • Post Json

  这些例子这里不做详细介绍了,如有需要请参考官方例子。 功能很强大吧,我们不用再引入其他的HttpClient的jar包了。

三、总结

  对于一线开发者而言,JAVA 11的体验就这么多,如有遗漏,会在以后补充。

JAVA 11初体验的更多相关文章

  1. java activemq初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  2. Java爬虫初体验

    年关将近,工作上该完成的都差不多了,上午闲着就接触学习了一下爬虫,抽空还把正则表达式复习了,Java的Regex和JS上还是有区别的,JS上的"\w"Java得写成"\\ ...

  3. Java集合初体验

    背景:        因为对Java的集合完全不了解,所以才在网上找了找能形成初步印象的文章进行学习,大多涉及的是一些概念和基础知识. 一.数组array和集合的区别: (1)数组是大小固定的,并且同 ...

  4. java学习初体验之课后习题

    import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { //打印Hel ...

  5. Java单元测试初体验(JUnit4)

    什么是单元测试 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应 ...

  6. JAVA多线程-初体验

    一.线程和进程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 二.为什么使用多线程,哪些场景下使用 多线程的好处是提高程序 ...

  7. java学习初体验NO.1

    一.学习目标: 1.理解Java编译原理 在Java编程语言中,所以源代码首先以用.Java扩展名结尾的纯文本件编写,然后,编译器将这些源文件编译成.Class文件.然后,Java启动器工具使用Jav ...

  8. java程序初体验

    示例代码 class Demo { public static void main(String[] args) { System.out.print("hello world") ...

  9. JAVA的初体验

    jdk的地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 第一步:找到相应的JAVA SE版本,点击down ...

随机推荐

  1. AGC016D - XOR Replace 置换/轮换

    目录 题目链接 题解 代码 题目链接 AGC016D - XOR Replace 题解 可以发现一次操作相当于一次置换 对于每个a上的位置映射到b对应 可以找到置换群中的 所有轮换 一个k个元素的轮换 ...

  2. 【CF765F】Souvenirs 主席树

    [CF765F]Souvenirs 题意:给你一个长度为n的序列{ai},有m个询问,每次询问给出l,r,问在所有$l\le x < y\le r$中,$|a_x-a_y|$的最小值是多少. $ ...

  3. 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)

    LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...

  4. BZOJ 5104

    这个模数比较有趣 可以求出 $\sqrt{5}$ 然后就可以做了 $f_n=\dfrac{\sqrt{5}}{5}[(\dfrac{\sqrt{5}+1}{2})^n-(\dfrac{1-\sqrt{ ...

  5. TypeError: 'module' object is not callable

    pkuseg.py 内容如下: import pkusegseg = pkuseg.pkuseg()text = seg.cut('我爱北京天安门')print(text) 原因是py文件名于包名一样 ...

  6. mobile_竖向滑屏

    竖向滑屏 元素最终事件 = 元素初始位置 + 手指滑动距离 移动端,"手指按下","手指移动" 两个事件即可(且不需要嵌套),有需要时才使用 "手指离 ...

  7. 关于finally代码块是否一定被执行的问题

    一般来说,只要执行了try语句,finally就会执行 但是,有以下几种情况需要特殊考虑 具体例子看链接  点击这里 第一点 try代码块没有被执行,意思就是错误在try代码块之前就发生了. 第二点 ...

  8. Java作业三(2017-9-25)

    /*程序员龚猛*/ 作业1 public class Variable_Demo$Long{ public static void main(String[]args { int i=3; long ...

  9. 报文分析2、IP头的结构

    IP头的结构 版本(4位) 头长度(4位) 服务类型(8位) 封包总长度(16位) 封包标识(16位) 标志(3位) 片断偏移地址(13位) 存活时间(8位) 协议(8位) 校验和(16位) 来源IP ...

  10. [Day24]IO(转换流、缓冲流)

    1. 转换流 1.1 OutputStreamWriter类-字符流通向字节流的桥梁,可使用指定的字符编码表,将要写入流中的字符编码成字节. 1.2 InputStreamReader类-字节流通向字 ...