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

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

1. 泛型类型的声明改变
在jdk 1.7 之前,需要这样用
程序代码 程序代码

Map<String, List<String>> employeeRecords =  new HashMap<String, List<String>>();
List<Integer> primes = new ArrayList<Integer>();

但在jdk 1.7 中,这样就可以了
程序代码 程序代码

Map<String, List<String>> employeeRecords =  new HashMap<>();
List<Integer> 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;


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


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: java
相关日志:
评论: 1 | 引用: 0 | 查看次数: -
回复回复sss[2015-03-17 05:38 PM | del]
自动释放资源,比如打开文件,流等资源,我估计着它自动释放得等到垃圾回收的时候。还是手动的好,用完就可以放了。自动释放始终不知道这个待会还用不用。如果引用存在估计他也不会放。
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.