本文共 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;
- 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 <> ();
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.数值可以使用下划线分隔;
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将包含对创建集合类的第一类语言支持。这意味着集合类的创建可以像Ruby和Perl那样了。
原本需要这样:
- List list = new ArrayList();
- list.add("item");
- String item = list.get(0);
-
- Set set = new HashSet();
- set.add("item");
-
- Map map = new HashMap();
- map.put("key", 1);
- int value = map.get("key");
现在可以这样写:
- List list = ["item"];
- String item = list[0];
-
- Set set = { "item"};
-
- Map map = { "key" : 1};
- int value = map["key"];
注意:这些集合是不可变的!
10、二进制字面量
由于继承C语言,Java代码在传统上迫使程序员只能使用十进制,八进制或十六进制来表示数(numbers)。
由于很少的域是以bit导向的,这种限制可能导致错误。你现在可以使用0b前缀创建二进制字面量:
- int binary = 0b1001_1001;
11、简化的可变参数调用 当程序员试图使用一个不可具体化的可变参数并调用一个*varargs* (可变)方法时,编辑器会生成一个“非安全操作”的警告。JDK 7将警告从call转移到了方法声明(methord declaration)的过程中。这样API设计者就可以使用vararg,因为警告的数量大大减少了。
12.还有一些动态特性的加入。
java.lang.invoke
包的引入。 MethodHandle
, CallSite
还有一些其他类供使用。
具体参见原文
更多内容,大家可参考: