Java8学习之路-Java8的发展 (2)

前者可以用来打开系统默认浏览器浏览指定的URL,打开系统默认邮件客户端给指定的邮箱发邮件, 用默认应用程序打开或编辑文件(比如,用记事本打开以 txt 为后缀名的文件),用系统默认的打印机打印文档;

后者可以用来在系统托盘区创建一个托盘程序。

轻量级Http Server API

JDK1.6 提供了一个简单的 Http Server API,据此我们可以构建自己的嵌入式 Http Server, 它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的 Http Server API来实现, 程序员必须自己实现 HttpHandler 接口,HttpServer 会调用 HttpHandler 实现类的回调方法来处理客户端请求, 在这里,我们把一个 Http 请求和它的响应称为一个交换,包装成 HttpExchange 类,HttpServer 负责将 HttpExchange 传给 HttpHandler 实现类的回调方法。

对脚本语言的支持

如:ruby,groovy,javascript。

下面展示了如何在Java中调用js代码。

ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("ECMAScript"); JDK7 捕获多异常 public static void first(){ try { BufferedReader reader = new BufferedReader(new FileReader("")); Connection con = null; Statement stmt = con.createStatement(); } catch (IOException | SQLException e) { //捕获多个异常,e就是final类型的 e.printStackTrace(); } }

优点:用一个 catch 处理多个异常,比用多个 catch 每个处理一个异常生成的字节码要更小更高效。

数字变量对下滑线的支持

JDK1.7可以在数值类型的变量里添加下滑线,但是有几个地方是不能添加的

数字的开头和结尾

小数点前后

F或者L前

int num = 1234_5678_9; float num2 = 222_33F; long num3 = 123_000_111L;

比如我们需要让线程休眠10s,如果我们直接写10000语义上不太清晰,而如果换成10_000就比较清晰的可以表示休眠10s。

switch对String的支持 String status = "orderState"; switch (status) { case "ordercancel": System.out.println("订单取消"); break; case "orderSuccess": System.out.println("预订成功"); break; default: System.out.println("状态未知"); } try-with-resource

try-with-resources 是一个定义了一个或多个资源的 try 声明,这个资源是指程序处理完它之后需要关闭它的对象。

try-with-resources 确保每一个资源在处理完成后都会被关闭。

可以使用try-with-resources的资源有:任何实现了 java.lang.AutoCloseable 接口 java.io.Closeable 接口的对象。

例如:

public static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(path))) { return br.readLine(); } }

在 java 7 以及以后的版本里,BufferedReader 实现了 java.lang.AutoCloseable 接口。 由于 BufferedReader 定义在 try-with-resources 声明里,无论 try 语句正常还是异常的结束, 它都会自动的关掉。而在 java7 以前,你需要使用 finally 块来关掉这个对象。

创建泛型时类型推断

只要编译器可以从上下文中推断出类型参数,你就可以用一对空着的尖括号 <> 来代替泛型参数。 这对括号私下被称为菱形(diamond)。 在Java SE 7之前,你声明泛型对象时要这样

List<String> list = new ArrayList<String>();

而在Java SE7以后,你可以这样

List<String> list = new ArrayList<>();

因为编译器可以从前面(List)推断出推断出类型参数,所以后面的 ArrayList 之后可以不用写泛型参数了,只用一对空着的尖括号就行。 当然,你必须带着菱形 <>,否则会有警告的。 Java SE7 只支持有限的类型推断:只有构造器的参数化类型在上下文中被显著的声明了,你才可以使用类型推断,否则不行。

List<String> list = new ArrayList<>();l list.add("A"); //这个不行 list.addAll(new ArrayList<>()); // 这个可以 List<? extends String> list2 = new ArrayList<>(); list.addAll(list2); Java8 Base64

对 Base64 编码的支持已经被加入到Java 8官方库中,这样不需要使用第三方库就可以进行Base64编码,例子代码如下:

final String text = "Lets Learn Java 8!"; final String encoded = Base64 .getEncoder() .encodeToString(text.getBytes(StandardCharsets.UTF_8)); System.out.println(encoded); final String decoded = new String( Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8); System.out.println(decoded);

新的Base64API也支持URL和MINE的编码解码。

新的日期时间 API

Java 8引入了新的Date-Time API(JSR 310)来改进时间、日期的处理。时间和日期的管理一直是最令Java开发者痛苦的问题。 java.util.Date 和后来的 java.util.Calendar 一直没有解决这个问题(甚至令开发者更加迷茫)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzyjjg.html