java 7.0 特性_JDK7.0新特性---七大新特性 远哥总结

1、二进制字面量

JDK7开始,可以用二进制来表示整数(byte,short,int和long),使用二进制字面量的好处是,可以使代码更容易被理解。

语法非常简单,只要在二进制数值前面加 0b或者0B,举例:

//一个8位'byte'值:

byte aByte = (byte)0b00100001;

//一个16位'short'值:

short aShort = (short)0b1010000101000101;

//一些32位'int'值:

int anInt1 = 0b10100001010001011010000101000101;

int anInt2 = 0b101;

int anInt3 = 0B101; // B可以是大写也可以是小写.

//一个64位的'long'值. 注意"L"结尾:

long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;

2、在数字字面量使用下划线

为了增强对数值的阅读性,如我们经常把数据用逗号分隔一样。JDK7提供了_对数据分隔,举例:

int x = 100_1000;

/*

注意事项:

不能出现在进制标识和数值之间

不能出现在数值开头和结尾

不能出现在小数点旁边

*/

int a = 0b100_100;

int b = 0b_100_100;

int c = 0b100_100_;

float d = 12.34_56f;

float e = 12._34_56f;

3、switch可以使用string了

public String switchDemo(String uName) {

String personDesc;

switch (uName) {

case "taven_li":

personDesc = "远哥,十年码农";

break;

case "lilei":

case "lily":

case "rose":

personDesc = "菜鸟";

break;

default:

personDesc = "侠客";

}

return personDesc;

}

4、实例创建的类型推断

由于编译器能够从上下文推断出参数类型,所以你可以用一组空类型参数(<>)替换泛型类构造函数的调用所需的类型参数。这对角括号通俗地称为菱形,举例:

Map> tavenMap = new HashMap>();

//可以改为如下形式:

Map> tavenMap = new HashMap<>();

List tavenlist = new ArrayList();

//可以改为如下形式:

List tavenlist = new ArrayList<>();

5、使用Varargs方法使用不可维护的形式参数时改进了编译器警告和错误

List list = new ArrayList();

List ls = list; // unchecked warning

list.add(0, new Integer(42)); // another unchecked warning

String s = ls.get(0); // ClassCastException is thrown

6、try-with-resources 资源的自动管理

try-with-resources声明保证每一个资源都会被关闭在声明结束的时候。任何实现了java.lang.AutoCloseable接口或者实现了java.io.Closeable,可以作为一个资源。

下面的例子从文件中读取第一行。用到了BufferedReader得实例去从文件中读取数据。BufferedReader是一个资源,在程序完成之后必须关闭。

String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {

BufferedReader br = new BufferedReader(new FileReader(path));

try {

return br.readLine();

} finally {

if (br != null) br.close();

}

}

在这个例子中,如果方法readLine和close都抛出异常,方法readFirstLineFromFileWithFinallyBlock则抛出由finally块抛出的异常,由try块排除的异常将会被抑制。相反,在例子readFirstLineFromFile中,如果try块和try-with-resources声明都抛出异常,方法readFirstLineFromFile则抛出由try块抛出的异常,由try-with-resources抛出的异常将会被抑制。

以下示例将检索打包在zip文件zipFileName中的文件的名称,并创建一个包含这些文件名称的文本文件:

void writeToFileZipFileContents(String zipFileName, String outputFileName)

throws java.io.IOException {

java.nio.charset.Charset charset = java.nio.charset.Charset.forName("US-ASCII");

java.nio.file.Path outputFilePath = java.nio.file.Paths.get(outputFileName);

// Open zip file and create output file with try-with-resources statement

try (

java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);

java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)

) {

// Enumerate each entry

for (java.util.Enumeration entries = zf.entries(); entries.hasMoreElements();) {

// Get the entry name and write it to the output file

String newLine = System.getProperty("line.separator");

String zipEntryName = ((java.util.zip.ZipEntry)entries.nextElement()).getName() + newLine;

writer.write(zipEntryName, 0, zipEntryName.length());

}

}

}

以下示例使用try-with-resources语句自动关闭java.sql.Statement对象:

void viewTable(Connection con) throws SQLException {

String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";

try (Statement stmt = con.createStatement()) {

ResultSet rs = stmt.executeQuery(query);

while (rs.next()) {

String coffeeName = rs.getString("COF_NAME");

int supplierID = rs.getInt("SUP_ID");

float price = rs.getFloat("PRICE");

int sales = rs.getInt("SALES");

int total = rs.getInt("TOTAL");

System.out.println(coffeeName + ", " + supplierID + ", " + price +

", " + sales + ", " + total);

}

} catch (SQLException e) {

JDBCTutorialUtilities.printSQLException(e);

}

}

注意:try-with-resources的语句可以像普通的try语句一样拥有catch和finally。在try-with-resources语句中,在声明的资源已关闭后,将运行任何catch或finally块。

被抑制的异常

可以从与try-with-resources语句关联的代码块中抛出异常。在该示例中writeToFileZipFileContents,可以从该try块中引发异常,并且try在尝试关闭ZipFile和BufferedWriter对象时最多可以从-with-resources语句中引发两个异常。如果从try块中抛出一个异常,并且从try-with-resources语句抛出了一个或多个异常,那么从try-with-resources语句抛出的这些异常将被抑制,并且该块抛出的异常将被抛出通过该writeToFileZipFileContents方法。您可以通过Throwable.getSuppressed从该try块抛出的异常中调用方法来检索这些抑制的异常。

实现了AutoCloseable或者Closeable接口的类

Closeable接口继承了AutoCloseable接口,当AutoCloseable接口的close方法抛出异常类型为Exception的异常时,Closeable的close方法抛出异常类型为IOException的异常。因此,接口AutoCloseable接口的实现类可以重写由close方法来抛出指定的异常,比如IOException或者完全不抛出异常。

7、捕捉多个异常类型和对重新抛出异常的高级类型检查

catch (IOException ex) {

logger.log(ex);

throw ex;

catch (SQLException ex) {

logger.log(ex);

throw ex;

}

//可以改为如下形式:

catch (IOException|SQLException ex) {

logger.log(ex);

throw ex;

}

远哥,作为一个10多年的老程序员,觉得巩固一个知识,最好的方法就是学过之后,对他进行总结和整理,是非常有意义的,也希望对大家有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值