目录 start
目录 end
|2018-07-08| 码云 | CSDN | OSChina
Java7
小特性
- | Switch 支持 String
- | 二进制的实例化 原本是
int x = Integer.parseInt("1010100", 2);
Java7之后int x = 0b110110;
- | 数字下划线
10_0100__1000__0011
- | 钻石语法: 泛型右部直接
<>
不用写类型变量
异常处理
- | 异常处理
- 允许异常的
或
操作catch(IOException | NullPointException e)
- final关键字:
catch (final Exception e){throw e;}
抛出后的是原异常类型的异常而不是Exception
- 允许异常的
TWR
- | TWR(try with resources)
// 从URL下载文件, 其中的资源都会自动关闭 // 但是要注意发生异常后,资源也不会自动关闭, 所以确保TWR生效,正确的用法是为各个资源声明独立变量. try(OutputStream out = new FileOutputStream(file); InputStream is = url.openStream() ){ byte[] buf = new byte[1024]; int len; while ((len = is.read(buf)) > 0){ out.write(buf, 0, len); } }
- 另一个好处就是改善了错误跟踪的能力, 能够更准确地跟踪堆栈中的异常, 在Java7之前,处理资源时抛出的异常经常会被覆盖,TWR也可能会出现这种情况.
try((InputStream in = getNullStream())){ in.available(); }
- 在这种改进后的跟踪堆栈中能看到提示, 其中的NullPointException是能够抛出来看到的.没有被隐藏
目前TWR特性依靠一个接口来实现 AutoCloseable. TWR的try从句中出现的资源类都必须实现这个接口. Java7中大部分资源类都修改过
但不是所有的资源类都采用了这项技术, JDBC是已经具备了这个特性. 官方提倡尽量采用TWR替代原有的方式
- | 简化变参方法调用:
HashMap<String, String>[] array = new HashMap<>[2];
不允许创建已知类型的泛型数组- 只能这样写
HashMap<String, String> array = new HashMap[2];
- 这样的编写也只是一个敷衍, 编译器会警告: 可以将array定义为HashMap
数组,但是又不能创建这个类型的实例. 所以这里只是将原始类型实例化了放进去.
- 这样的编写也只是一个敷衍, 编译器会警告: 可以将array定义为HashMap
- 现在能够这样编写:
public static <T> Collection<T> doSomething(T... entries){}
- [ ] 反射的简化和加强