java7的新特性
1、Java语言和平台的区别
-
Java语言 Java语言是静态类型、面向对象的语言
-
Java平台 平台是提供运行时环境的软件。Java虚拟机(JVM)负责把类文件形式的代码链接起来并执行。JVM不能直接解释Java语言的源文件,要先把源文件转换成类文件
2、Java是编译型语言还是解释型语言?
大多数开发人员都知道Java源文件需要编译成.class文件才能在JVM中运行。.class中的字节码首先会被JVM解释,但在稍后即时编译(JIT)。JVM字节码是从一种人类可读的源码想机器码过渡的中间状态。字节码实际上是一种中间语言(IL)邢台,不是真正的字节码。Java体系中真正的编译器是JIT。所以有人说Java是动态编译的,就是因为JIT的即时编译。如果有人问及你“Java是编译型语言还是解释型语言”,你可以回答“都是”
3、Java7引入的新特性
Java7引入了6个新特性,它们分别是:switch语句中的string、数字常量的新形式、改进的异常处理、try-with-resources、钻石语法以及变参警告位置的修改
3.1、在Java6及以前,switch语句中的case语句只能是byte、char、short和int(也可以是对应的封装类型Byte、Character、Short和Integer)或者枚举常量。Java7中新增了String常量类型。
3.2、在Java6及以前,如果要处理二进制值,就要借助于基础转换,或者调用parseX方法。比如说你想让int x用位模式表示十进制102,你可以这样写
1
2
3
4
5
|
/*代码繁琐,影响效率*/ int x = Integer.parseInt("1100110",2); /**现在好了,Java7中可以这样写*/ int x = 0b1110010; |
当然也可以在数字中加入下划线例如404_555_0122。
3.3、改善后的异常处理。异常处理有两处改进--multicatch和final重抛。java7中允许在一个catch中抓取多个异常。先看下代码示例
1
2
3
4
5
6
7
8
9
|
try { doSomethingWhichMightThrowIOException(); doSomethingElseWhichMightThrowSQLException } catch (FileNotFoundException|ParseException|ConfigurationExcetion e){ ... } catch ( final Exception e){ ... throw e; } |
关键字final表明实际抛出的异常就是运行时遇到的异常。java培训这被称为final重抛,这样就不会抛出笼统的异常类型,从而避免在上层只能用笼统的catch捕获。
3.4、try-with-resources(TWR)。基本设想是把资源的作用域限定在代码块内,当程序离开这个代码块的时候,资源会自动关闭。先看下Java6和Java7资源管理语法的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/*Java6中的资源管理语法*/ InputStream is = null; try{ is = url.openStream(); try{ byte[] buf = new byte[2048]; int len; while((len = is.read(buf)) >= 0){ out.write(buf,0,len); } } catch(IOException ioe){ ... } finally{ try{ out.close(); } catch(IOException closeOute){ ... } } } catch(FileNotFoundException fnfx){ ... } finally{ try{ if(is != null) is.close(); } catch(IOException closeInx){ ... } } /**Java7中的try-with-resources语法大大减少了错误发生的可能性*/ try (OutputStream out = new FileOutputStream(file); InputStream is = url.openStream() ){ byte [] buf = new byte [ 2048 ]; int len; while ((len = is.read(buf)) >= 0 ){ out.write(buf, 0 ,len); } } /*这是资源自动化管理代码的基本形式--把资源放在 try 的圆括号内。在这段代码中使用的资源会在处理完成后自动关闭* |
3.5、钻石语法。针对创建泛型定义和实例太过繁琐的问题,Java7做了一项改进,
3.6、简化参数方法调用。去掉了方法签名中同时出现变参和泛型时才会出现的类型警告信息。