yq76034150的專欄
阿新 • • 發佈:2019-01-07
本文介紹的java 7新特性更多的感覺像是語法糖。畢竟java本身已經比較完善了,不完善的很多比較難實現或者是依賴於某些底層(例如作業系統)的功能。不過java7也實現了類似aio的強大功能。但本文並未有此介紹。主要是 1.switch可以接受string型別而不像以前僅僅是int;2.異常catch可以一次處理完而不像以前一層層的surround;3.泛型類例項化也不用繁瑣的將泛型宣告再寫一遍;4.檔案讀寫 會自動關閉流而不像以前那樣需要在finally中顯式close;5.數值可以使用下劃線分隔;6.檔案讀寫功能增強,有更簡單的api呼叫;7.檔案改變的事件通知功能;8.多核 平行計算的支援加強 fork join 框架;9.還有一些動態特性的加入。
具體看程式碼:
1.switch可以接受string型別而不像以前僅僅是int;
2.異常catch可以一次處理完而不像以前一層層的surround;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; } }
public void newMultiCatch() {
try {
methodThatThrowsThreeExceptions();
} catch (ExceptionOne | ExceptionTwo | ExceptionThree e) {
// log and deal with all Exceptions
}
}
3.泛型類例項化也不用繁瑣的將泛型宣告再寫一遍;
Map<String, List<Trade>> trades = new TreeMap <> ();
4.檔案讀寫 會自動關閉流而不像以前那樣需要在finally中顯式close;
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.數值可以使用下劃線分隔;
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.檔案改變的事件通知功能;
/**
* 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 框架;
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
還有一些其他類供使用。
具體參見原文 http://radar.oreilly.com/2011/09/java7-features.html