Java8来了,回顾一下Java7的一些特性.

摘要: Java 8 就这样走进了程序员的生活,虽然时间不长,但有很多新的特性。然而我们很多项目还停留在java6, jdk 1.6时代,甚至在正式生产环境中,我现在所做的很多项目都没用到过java7, 然而 java8 还是来了,也许是我跟不上这个时代了,毕竟岁月不饶人,先在这里总结下java 7 所拥有的一些新特性

Java 8 就这样走进了程序员的生活,虽然时间不长,但有很多新的特性。然而我们很多项目还停留在java6, jdk 1.6时代,甚至在正式生产环境中,我现在所做的很多项目都没用到过java7, 然而 java8 还是来了,也许是我跟不上这个时代了,毕竟岁月不饶人,先在这里总结下java 7 所拥有的一些新特性:

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;


这少这些特性是需要知道了,否则今后看到新的代码,自己都会感觉奇怪了。

上一篇: Django Form 自定义字段错误信息
下一篇: Spring MVC 与 MongoDB 结合的简单例子下载

Avatar

sss 评论于: 2015-03-17

自动释放资源,比如打开文件,流等资源,我估计着它自动释放得等到垃圾回收的时候。还是手动的好,用完就可以放了。自动释放始终不知道这个待会还用不用。如果引用存在估计他也不会放。
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号