前者可以用来打开系统默认浏览器浏览指定的URL,打开系统默认邮件客户端给指定的邮箱发邮件, 用默认应用程序打开或编辑文件(比如,用记事本打开以 txt 为后缀名的文件),用系统默认的打印机打印文档;
后者可以用来在系统托盘区创建一个托盘程序。
轻量级Http Server APIJDK1.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-resourcetry-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的编码解码。
新的日期时间 APIJava 8引入了新的Date-Time API(JSR 310)来改进时间、日期的处理。时间和日期的管理一直是最令Java开发者痛苦的问题。 java.util.Date 和后来的 java.util.Calendar 一直没有解决这个问题(甚至令开发者更加迷茫)。