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、简化参数方法调用。去掉了方法签名中同时出现变参和泛型时才会出现的类型警告信息。

原文地址:https://www.cnblogs.com/plan123/p/5600691.html