博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java7的新特性
阅读量:4042 次
发布时间:2019-05-24

本文共 3519 字,大约阅读时间需要 11 分钟。

转载地址:http://blog.csdn.net/chenleixing/article/details/47802653

               http://blog.csdn.net/make19830723/article/details/6704498

本文介绍的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;

[html]
 
  1. public void processTrade(Trade t) {  
  2.   
  3.             String status = t.getStatus();  
  4.   
  5.    
  6.   
  7.             switch (status) {  
  8.   
  9.             case NEW:  
  10.   
  11.                   newTrade(t);  
  12.   
  13.                   break;  
  14.   
  15.             case EXECUTE:  
  16.   
  17.                   executeTrade(t);  
  18.   
  19.                   break;  
  20.   
  21.             case PENDING:  
  22.   
  23.                   pendingTrade(t);  
  24.   
  25.                   break;  
  26.   
  27.    
  28.   
  29.             default:  
  30.   
  31.                   break;  
  32.   
  33.             }  
  34.   
  35.       }  
  36.         
2.异常catch可以一次处理完而不像以前一层层的surround;

[html]
 
  1. public void newMultiCatch() {  
  2.   
  3.            try {  
  4.   
  5.                  methodThatThrowsThreeExceptions();  
  6.   
  7.            } catch (ExceptionOne | ExceptionTwo | ExceptionThree e) {  
  8.   
  9.                  // log and deal with all Exceptions  
  10.   
  11.            }  
  12.   
  13.      }  


3.泛型类实例化也不用繁琐的将泛型声明再写一遍;

[html]
 
  1. Map<String, List<Trade>> trades = new TreeMap <> ();  

4.文件读写 会自动关闭流而不像以前那样需要在finally中显式close;

[html]
 
  1. public void newTry() {  
  2.   
  3.   
  4.   
  5.           try (FileOutputStream fos = new FileOutputStream("movies.txt");  
  6.   
  7.                       DataOutputStream dos = new DataOutputStream(fos)) {  
  8.   
  9.                 dos.writeUTF("Java 7 Block Buster");  
  10.   
  11.           } catch (IOException e) {  
  12.   
  13.                 // log the exception  
  14.   
  15.           }  
  16.   
  17.     }  


5.数值可以使用下划线分隔;

[html]
 
  1. int million  =  1_000_000  

6.文件读写功能增强,有更简单的api调用;

 
[html] 
  1. public void pathInfo() {  
  2.   
  3.             Path path = Paths.get("c:\\Temp\\temp");  
  4.   
  5. System.out.println("Number of Nodes:" + path.getNameCount());  
  6.   
  7.             System.out.println("File Name:" + path.getFileName());  
  8.   
  9.             System.out.println("File Root:" + path.getRoot());  
  10.   
  11.             System.out.println("File Parent:" + path.getParent());   
  12.              
  13.             //这样写不会抛异常  
  14.             Files.deleteIfExists(path);  
  15.  }  

7.文件改变的事件通知功能;

[html]
 
  1. /**  
  2.   
  3.  * This initiates the police  
  4.   
  5.  */  
  6.   
  7. private void init() {  
  8.   
  9.       path = Paths.get("C:\\Temp\\temp\\");  
  10.   
  11.       try {  
  12.   
  13.             watchService = FileSystems.getDefault().newWatchService();  
  14.   
  15.             path.register(watchService, ENTRY_CREATE, ENTRY_DELETE,  
  16.   
  17.                         ENTRY_MODIFY);  
  18.   
  19.       } catch (IOException e) {  
  20.   
  21.             System.out.println("IOException"+ e.getMessage());  
  22.   
  23.       }  
  24.   
  25. }  
  26.   
  27. /**  
  28.   
  29.  * The police will start making rounds  
  30.   
  31.  */  
  32.   
  33. private void doRounds() {  
  34.   
  35.       WatchKey key = null;  
  36.   
  37.       while(true) {  
  38.   
  39.             try {  
  40.   
  41.                   key = watchService.take();  
  42.   
  43.                   for (WatchEvent<?> event : key.pollEvents()) {  
  44.   
  45.                         Kind<?> kind = event.kind();  
  46.   
  47. System.out.println("Event on " + event.context().toString() + " is " + kind);  
  48.   
  49.                   }  
  50.   
  51.             } catch (InterruptedException e) {  
  52.   
  53. System.out.println("InterruptedException: "+e.getMessage());  
  54.   
  55.             }  
  56.   
  57.             boolean reset = key.reset();  
  58.   
  59.             if(!reset)  
  60.   
  61.                   break;  
  62.   
  63.       }  
  64.   
  65. }  


8.多核 并行计算的支持加强 fork join 框架;

[html]
 
  1. ForkJoinPool pool = new ForkJoinPool(numberOfProcessors);  
  2.   
  3. public class MyBigProblemTask extends RecursiveAction {  
  4.   
  5.    
  6.   
  7.     @Override  
  8.   
  9.     protected void compute() {  
  10.   
  11.         . . . // your problem invocation goes here  
  12.   
  13.     }  
  14.   
  15. }  
  16.   
  17. pool.invoke(task);  


9、对集合类的语言支持

Java将包含对创建集合类的第一类语言支持。这意味着集合类的创建可以像Ruby和Perl那样了。

原本需要这样:

[java] 
 
  1. List list = new ArrayList();    
  2. list.add("item");    
  3. String item = list.get(0);    
  4.    
  5. Set set = new HashSet();    
  6. set.add("item");    
  7.    
  8. Map map = new HashMap();    
  9. map.put("key"1);    
  10. int value = map.get("key");  
现在可以这样写:

[java] 
 
  1. List list = ["item"];    
  2. String item = list[0];    
  3.    
  4. Set set = {
    "item"};    
  5.    
  6. Map map = {
    "key" : 1};    
  7. int value = map["key"];   

注意:这些集合是不可变的!

10、二进制字面量

由于继承C语言,Java代码在传统上迫使程序员只能使用十进制,八进制或十六进制来表示数(numbers)。

由于很少的域是以bit导向的,这种限制可能导致错误。你现在可以使用0b前缀创建二进制字面量:

[java] 
 
  1. int binary = 0b1001_1001;   

11、简化的可变参数调用

当程序员试图使用一个不可具体化的可变参数并调用一个*varargs* (可变)方法时,编辑器会生成一个“非安全操作”的警告。JDK 7将警告从call转移到了方法声明(methord declaration)的过程中。这样API设计者就可以使用vararg,因为警告的数量大大减少了。

12.还有一些动态特性的加入。

java.lang.invoke 包的引入。 MethodHandle, CallSite 还有一些其他类供使用。

具体参见原文 

更多内容,大家可参考:

你可能感兴趣的文章
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
可扩展、高可用服务网络设计方案
查看>>
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
android 代码实现圆角
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>