本文介紹的java 7新特性更多的感受像是語法糖。畢竟java自己已經比較完善了,不完善的不少比較難實現或者是依賴於某些底層(例如操做系統)的功能。不過java7也實現了相似aio的強大功能。但本文並未有此介紹。主要是 1.switch能夠接受string類型而不像之前僅僅是int;2.異常catch能夠一次處理完而不像之前一層層的surround;3.泛型類實例化也不用繁瑣的將泛型聲明再寫一遍;4.文件讀寫 會自動關閉流而不像之前那樣須要在finally中顯式close;5.數值能夠使用下劃線分隔;6.文件讀寫功能加強,有更簡單的api調用;7.文件改變的事件通知功能;8.多核 並行計算的支持增強 fork join 框架;9.還有一些動態特性的加入。html
具體看代碼:java
1.switch能夠接受string類型而不像之前僅僅是int;api
public void processTrade(Trade t) { String status = t.getStatus(); switch (status) { case NEW: newTrade(t); break; case EXECUTE: executeTrade(t); break; case PENDING: pendingTrade(t); break; default: break; } }2.異常catch能夠一次處理完而不像之前一層層的surround;
public void newMultiCatch() { try { methodThatThrowsThreeExceptions(); } catch (ExceptionOne | ExceptionTwo | ExceptionThree e) { // log and deal with all Exceptions } }
3.泛型類實例化也不用繁瑣的將泛型聲明再寫一遍;框架
Map<String, List<Trade>> trades = new TreeMap <> ();
public void newTry() { try (FileOutputStream fos = new FileOutputStream("movies.txt"); DataOutputStream dos = new DataOutputStream(fos)) { dos.writeUTF("Java 7 Block Buster"); } catch (IOException e) { // log the exception } }
5.數值能夠使用下劃線分隔;ide
int million = 1_000_000
6.文件讀寫功能加強,有更簡單的api調用;操作系統
public void pathInfo() { Path path = Paths.get("c:\\Temp\\temp"); System.out.println("Number of Nodes:" + path.getNameCount()); System.out.println("File Name:" + path.getFileName()); System.out.println("File Root:" + path.getRoot()); System.out.println("File Parent:" + path.getParent()); //這樣寫不會拋異常 Files.deleteIfExists(path); }
7.文件改變的事件通知功能;code
/** * This initiates the police */ private void init() { path = Paths.get("C:\\Temp\\temp\\"); try { watchService = FileSystems.getDefault().newWatchService(); path.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); } catch (IOException e) { System.out.println("IOException"+ e.getMessage()); } } /** * The police will start making rounds */ private void doRounds() { WatchKey key = null; while(true) { try { key = watchService.take(); for (WatchEvent<?> event : key.pollEvents()) { Kind<?> kind = event.kind(); System.out.println("Event on " + event.context().toString() + " is " + kind); } } catch (InterruptedException e) { System.out.println("InterruptedException: "+e.getMessage()); } boolean reset = key.reset(); if(!reset) break; } }
8.多核 並行計算的支持增強 fork join 框架;htm
ForkJoinPool pool = new ForkJoinPool(numberOfProcessors); public class MyBigProblemTask extends RecursiveAction { @Override protected void compute() { . . . // your problem invocation goes here } } pool.invoke(task);
9.還有一些動態特性的加入。事件
java.lang.invoke
包的引入。 MethodHandle
, CallSite
還有一些其餘類供使用。get
具體參見原文 http://radar.oreilly.com/2011/09/java7-features.html