原创

Java7新特性


  • 2011年7月28日,Oracle正式发布了Java 7。这一晃都2018年了,我不敢想象Java7都发布了7年之久,在我的印象中,Java7仿佛就在昨天。

  1. switch中添加对String类型的支持

这个特性还是挺有用的,在Java7之前,switch中只允许byte,short,int,char,emun 5种类型,此次加入String也是合情合理。

String s = "a";  
switch (s) {  
    case "a":  
        System.out.println("is a");  
        break;  
    case "b":  
        System.out.println("is b");  
        break;  
    default:  
        System.out.println("is c");  
        break;  
}  
  1. try-with-resources语句

Java7之前我们必须要在try-catch-finally中手动关闭socket、文件、数据库连接等资源,如InputStream,Writes,Sockets,Sql等;Java7中在try语句中申请资源,实现资源的自己主动释放(资源类必须是实现java.lang.AutoCloseable接口java.io.Closeable接口的对象,一般的文件、数据库连接等均已实现该接口,close方法将被自己主动调用)。并且try语句中支持管理多个资源。

Java7之前:

FileReader fr = null;  
BufferedReader br = null;
try {
    fr = new FileReader(fileName);
    br = new BufferedReader(fr);
    return br.readLine();
} catch (Exception e) {
    log.error("error:{}", e);
} finally {
  if (br != null) {
    try {
      br.close();
    } catch(IOException e){
      log.error("error:{}", e);
    }
  }

Java7:

try (
    FileReader fr = new FileReader(fileName);
    BufferedReader br = new BufferedReader(fr);
  ) {
    return br.readLine();
}catch (Exception e) {
    log.error("error:{}", e);
}

这样一来简洁不少。

  1. 异常处理优化

  • catch子句可以同时捕获多个异常:java7以前在一个方法抛出多个异常时,只能一个个catch,这样代码会有多个catch,显得很不友好,现在只需一个catch语句,多个异常类型用"|"隔开。

  • Throwable类添加addSuppressed方法和getSuppressed方法。支持原始异常中加入被抑制的异常:异常抑制:在try和finally中同一时候抛出异常时,finally中抛出的异常会在异常栈中向上传递,而try中产生的原始异常会消失。在Java7之前能够将原始异常保存。在finally中产生异常时抛出原始异常

Java7之前:

try {  
    result = field.get(obj);  
} catch (IllegalArgumentException e) {  
    e.printStackTrace();  
} catch (IllegalAccessException e) {  
    e.printStackTrace();  
}  

Java7:

try {  
    result = field.get(obj);  
} catch (IllegalArgumentException | IllegalAccessException e) {  
    e.printStackTrace();  
}  

Java7之前:

    public void read(String filename) throws BaseException {  
        FileInputStream input = null;  
        IOException readException = null;  
        try {  
            input = new FileInputStream(filename);  
        } catch (IOException ex) {  
            readException = ex;   //保存原始异常  
        } finally {  
            if (input != null) {  
                try {  
                    input.close();  
                } catch (IOException ex) {  
                    if (readException == null) {  
                        readException = ex;  
                    }  
                }  
            }  
            if (readException != null) {  
                throw new BaseException(readException);  
            }  
        }  
    }  

在Java7中能够使用addSuppressed方法记录被抑制的异常:

    public void read(String filename) throws IOException {  
        FileInputStream input = null;  
        IOException readException = null;  
        try {  
            input = new FileInputStream(filename);  
        } catch (IOException ex) {  
            readException = ex;  
        } finally {  
            if (input != null) {  
                try {  
                    input.close();  
                } catch (IOException ex) {  
                    if (readException != null) {    //此处的差别  
                        readException.addSuppressed(ex);  
                    }  
                    else {  
                        readException = ex;  
                    }  
                }  
            }  
            if (readException != null) {  
                throw readException;  
            }  
        }  
    }  
  1. 泛型实例化类型自动推断

直接上代码把,个人认为意义不太大。

Java7之前:

List<String> list = new ArrayList<String>();  

Java7:

List<String> list = new ArrayList<>();  
  1. 数字字面量的改进

  • 添加二进制表示:Java7前支持十进制(123)、八进制(0123)、十六进制(0X12AB),Java7添加二进制表示(0B11110001、0b11110001)

  • 数字中可加入分隔符:Java7中支持在数字量中间添加'_'作为分隔符。更直观,如(12_123_456)。下划线仅仅能在数字中间。编译时编译器自己主动删除数字中的下划线。

举例:

int binary = 0b0001_1001;
int intOne = 1_000_000;  
long longOne = 1_000_000;  
double doubleOne = 1_000_000;  
float floatOne = 1_000_000;  
System.out.println("binary is :"+binary); //25
  1. 支持JDBC4.1

不太了解

另外还有一些JSR提案的通过,例如:JSR341(EL表达式),JSR292(Invoke Dynamic),JSR203(NIO)。

新特性
javase
  • 作者:管理员(联系作者)
  • 发表时间:2020-03-19 10:10
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 微信公众号

    评论

    留言