本文介绍的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。
- 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
很多其它内容。大家可參考:
Java 7 的新特性一览表