Java8来了,回顾一下Java7的一些特性.
By:Roy.LiuLast updated:2014-04-21
Java 8 就这样走进了程序员的生活,虽然时间不长,但有很多新的特性。然而我们很多项目还停留在java6, jdk 1.6时代,甚至在正式生产环境中,我现在所做的很多项目都没用到过java7, 然而 java8 还是来了,也许是我跟不上这个时代了,毕竟岁月不饶人,先在这里总结下java 7 所拥有的一些新特性:
1. 泛型类型的声明改变
在jdk 1.7 之前,需要这样用
但在jdk 1.7 中,这样就可以了
2. 在 switch 中用 string 比较, 在 jdk 7 之前,只有整形数字才能用在switch中,但现在可以这样
3. 自动释放资源,比如打开文件,流等资源,以前需要手工在finally 里面手工释放,现在可以不用了,java 7 会自动管理,但个人觉得最好还是手工管理更好.
在jkd7 之前,一般是这样写程序的
但在 jdk 7 之后,你可以这样:
这样代码是不是简洁一些了, 另外据说 JDBC 4.1 开始 connection 都不需要你手工释放了。JDK 7都可以自动管理,这样可以省略很多try catch finally 的代码哦。
4. JDK 7 对于多线程开发启用了 Fork 方式,目前还没有测试过,有机会试一下.
5. 对于数字分割可以用下划线"_". 这样可以增加可读性,特别是金融行业大数据量的情况.
6. 如果有多个异常需要处理,可以写在一个 try catch 块中
在jdk 7 之前, 会这样处理
在JDK 7 之后,可以这样处理.
7. JDK 7 中增加了二进制数据表示方法,在以前只能用0表示8进制 0x 表示16进制的数据,但现在可以用0b 表示二进制数据了
这少这些特性是需要知道了,否则今后看到新的代码,自己都会感觉奇怪了。
1. 泛型类型的声明改变
在jdk 1.7 之前,需要这样用
Map> employeeRecords = new HashMap >(); List primes = new ArrayList ();
但在jdk 1.7 中,这样就可以了
Map> employeeRecords = new HashMap<>(); List primes = new ArrayList<>();
2. 在 switch 中用 string 比较, 在 jdk 7 之前,只有整形数字才能用在switch中,但现在可以这样
tring state = "NEW"; switch (day) { case "NEW": System.out.println("Order is in NEW state"); break; case "CANCELED": System.out.println("Order is Cancelled"); break; case "REPLACE": System.out.println("Order is replaced successfully"); break; case "FILLED": System.out.println("Order is filled"); break; default: System.out.println("Invalid"); }
3. 自动释放资源,比如打开文件,流等资源,以前需要手工在finally 里面手工释放,现在可以不用了,java 7 会自动管理,但个人觉得最好还是手工管理更好.
在jkd7 之前,一般是这样写程序的
public static void main(String args[]) { FileInputStream fin = null; BufferedReader br = null; try { fin = new FileInputStream("info.xml"); br = new BufferedReader(new InputStreamReader(fin)); if (br.ready()) { String line1 = br.readLine(); System.out.println(line1); } } catch (FileNotFoundException ex) { System.out.println("Info.xml is not found"); } catch (IOException ex) { System.out.println("Can't read the file"); } finally { try { if (fin != null) fin.close(); if (br != null) br.close(); } catch (IOException ie) { System.out.println("Failed to close files"); } } }
但在 jdk 7 之后,你可以这样:
public static void main(String args[]) { try (FileInputStream fin = new FileInputStream("info.xml"); BufferedReader br = new BufferedReader(new InputStreamReader(fin));) { if (br.ready()) { String line1 = br.readLine(); System.out.println(line1); } } catch (FileNotFoundException ex) { System.out.println("Info.xml is not found"); } catch (IOException ex) { System.out.println("Can't read the file"); } }
这样代码是不是简洁一些了, 另外据说 JDBC 4.1 开始 connection 都不需要你手工释放了。JDK 7都可以自动管理,这样可以省略很多try catch finally 的代码哦。
4. JDK 7 对于多线程开发启用了 Fork 方式,目前还没有测试过,有机会试一下.
5. 对于数字分割可以用下划线"_". 这样可以增加可读性,特别是金融行业大数据量的情况.
int billion = 1_000_000_000; // 10^9 long creditCardNumber = 1234_4567_8901_2345L; //16 digit number long ssn = 777_99_8888L; double pi = 3.1415_9265; float pif = 3.14_15_92_65f; double pi = 3._1415_9265; // underscore just after decimal point long creditcardNum = 1234_4567_8901_2345_L; //underscore at the end of number long ssn = _777_99_8888L; //undersocre at the beginning
6. 如果有多个异常需要处理,可以写在一个 try catch 块中
在jdk 7 之前, 会这样处理
try { ...... } catch(ClassNotFoundException ex) { ex.printStackTrace(); } catch(SQLException ex) { ex.printStackTrace(); }
在JDK 7 之后,可以这样处理.
try { ...... } catch(ClassNotFoundException|SQLException ex) { ex.printStackTrace(); }
7. JDK 7 中增加了二进制数据表示方法,在以前只能用0表示8进制 0x 表示16进制的数据,但现在可以用0b 表示二进制数据了
int mask = 0b01010000101; int binary = 0B0101_0000_1010_0010_1101_0000_1010_0010;
这少这些特性是需要知道了,否则今后看到新的代码,自己都会感觉奇怪了。
From:一号门
Previous:Django Form 自定义字段错误信息
COMMENTS