2019独角兽企业重金招聘Python工程师标准>>>

JDK7对Java语法有少量更新,重点是在易用性和便捷性的改进。

    1.二进制字面量

JDK7开始,终于可以用二进制来表示整数(byte,short,int和long)。使用二进制字面量的好处是,可以是代码更容易被理解。语法非常简单,只要在二进制数值前面加 0b或者0B

byte nByte = (byte)0b0001;
short nshotr = (short)0B0001;
int nInt = ob0011;
long nLong = 0b0100L;

    2.数字字面量可以出现下划线

对于一些比较大的数字,我们定义起来总是不方面,经常缺少或者增加位数。JDK7为我们提供了一种解决方案,下划线可以出现在数字字面量。

int a = 10_0000_0000;
long b = 0xffff_ffff_ffff_ffffl;
byte c = 0b0001_1000;

注意:你只能将下划线置于数字之间,以下使用方法是错误的,
            1.数字的开头或者结尾
            2.小数点的前后
            3.‘F’或者‘f’的后缀
            4.只能用数字的位置

int err1 = _11,err2=11_;
float err3=3._4,err4=3_.4;
long err5=0x888_f;

    3.switch 语句可以用字符串了

这个功能千呼万唤,终于出来了

private static void switchString(String str){  switch(str){  case "one":  System.err.println("1");  break;  case "two":  System.out.println("2");  break;  default :  System.out.println("err");  }
}

    4.泛型实例的创建可以通过类型推断来简化

以后你创建一个泛型实例,不需要再详细说明类型,只需用<>,编译器会自动帮你匹配

//例如
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
//可以简化为
Map<String, List<String>> myMap = new HashMap<>();

    5.在可变参数方法中传递非具体化参数(Non-Reifiable Formal Parameters),改进编译警告和错误

有些参数类型,例如ArrayList<Number> 和 List<String>,是非具体化的(non-reifiable).在编译阶段,编译器会擦除该类型信息。
        Heap pollution 指一个变量被指向另外一个不是相同类型的变量。例如

List l = new ArrayList<Number>();
List<String> ls = l;       // unchecked warning
l.add(0, new Integer(42)); // another unchecked warning
String s = ls.get(0);      // ClassCastException is thrown

回到我们的主题,在jdk7中,当你定义下面的函数时

public static <T> void addToList (List<T> listArg, T... elements) {  for (T x : elements) {  listArg.add(x);  }  }

你会得到一个warning

warning: [varargs] Possible heap pollution from parameterized vararg type

在jdk7之前,当你调用一个含有非具体化参数的可变参数方法,你必须自行保证不会发生“heap pollution”。这有一个问题,如果调用者对方法不熟悉,他根本无法判断。JDK7对此做了改进,在该方法被定义时久发出警告
        要消除警告,可以有三种方式
            1.加 annotation @SafeVarargs
            2.加 annotation @SuppressWarnings({"unchecked", "varargs"})
            3.使用编译器参数 –Xlint:varargs;

    6.try-with-resources 语句

jdk7提供了try-with-resources,可以自动关闭相关的资源(只要该资源实现了AutoCloseable接口,jdk7为绝大部分资源对象都实现了这个接口)

static String readFirstLineFromFile(String path) throws IOException {  try (BufferedReader br = new BufferedReader(new FileReader(path))) {  return br.readLine();  }
}

try 语句块中还可以同时处理多个资源,可以跟普通的try语句一样catch异常,有finally语句块

try (  java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);  java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)  ) {
}catch(…){
}finally{
}

    7.Catch多个Exception,rethrow exception 改进了类型检测

很多时候,我们捕获了多个异常,却做了相同的事情,比如记日志,包装成新的异常,然后rethrow。这时,代码就不那么优雅了,例如

catch (IOException ex) {  logger.log(ex);  throw ex;
catch (SQLException ex) {  logger.log(ex);  throw ex;
}

Jdk7允许捕获多个异常

catch (IOException|SQLException ex) {  logger.log(ex);  throw ex;
}

注意,catch后面的异常参数是final的,不能重新再复制
        Rethrow Exception更具包容性的类型检测
        当你重新抛出多个异常时,不再需要详细定义异常类型了,编译器已经知道你具体抛出的是哪个异常了。你只需在方法定义的时候声明需要抛出的异常即可

public void call() throws ReflectiveOperationException, IOException {  try {  callWithReflection(arg);  } catch (final Exception e) {  logger.trace("Exception in reflection", e);  throw e;  }
}

【JDK7】新特性(1)概述:http://my.oschina.net/zhengjian/blog/94467
【JDK7】新特性(2)语法:http://my.oschina.net/zhengjian/blog/94473
【JDK7】新特性(3)JDBC4.1:http://my.oschina.net/zhengjian/blog/95070
【JDK7】新特性(4)NIO2.0 文件系统:http://my.oschina.net/zhengjian/blog/95071
【JDK7】新特性(5)fork/join 框架:http://my.oschina.net/zhengjian/blog/95072
【JDK7】新特性(6)监听文件系统的更改:http://my.oschina.net/zhengjian/blog/95077
【JDK7】新特性(7)监听文件系统的更改:http://my.oschina.net/zhengjian/blog/95078
【JDK7】新特性(8)异步io/AIO:http://my.oschina.net/zhengjian/blog/95081

原文地址:http://janeky.iteye.com/blog/1047799

转载于:https://my.oschina.net/zhengjian/blog/94473

【JDK7】新特性(2) 语法相关推荐

  1. jdk7新特性学习笔记

    jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...

  2. 浮点数,字符串入门,基本数据类型自动转换,JDK7新特性, 变量.

    8.1 浮点型 **√ **float**类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求. √ ****double表示这种类型的数值精度是floa ...

  3. JDK7新特性之try-with-resources

    JDK7新特性之try-with-resources 本节内容并非JDK8的新特性,而是JDK7的新特性.此处讲解是因为多数人并不知道. 传统方式在资源关闭时,需要对每个需要关闭的资源进行 手动调用c ...

  4. JDK7新特性详细说明及代码示例

    在2011年7月28日,Oracle发布了JDK7的正式版.最近我从网上搜集了一些资料,把文字说明和代码示例结合起来,方便我们的学习. 下面我们来看看JDK7比6多了哪些新特性 1.访问文件系统 与之 ...

  5. ES6新特性(部分语法)

    ES6新特性 文章目录 ES6新特性 1.0let关键字 1.1let小案例 1.2const关键字 1.3解构赋值 1.4模板字符串 1.5简化对象写法 1.6箭头函数 1.7箭头函数的案例 1.7 ...

  6. JDK7新特性简单翻译介绍

    « 家庭特点里程碑 · 建立 日历 » JDK 7中 特点 这是由甲骨文正在开发的功能,和其他列表中,JDK 7中. 这些功能将建议列入中的Java SE 7平台JSR ,除了为实现特定的上市的. 评 ...

  7. JDK7新特性_JDK7的六个新特性

    二进制字面量JDK7开始,终于可以用二进制来表示整数(byte,short,int和long).使用二进制字面量的好处是,可以使代码更容易被理解.语法非常简单,只要在二进制数值前面加 0b或者0B举例 ...

  8. ES6新特性_ES6语法糖class介绍与初体验_就是个语法糖而已---JavaScript_ECMAScript_ES6-ES11新特性工作笔记033

    然后我们看es6中的class,es6中引入这个class这个概念,为了让js的写法更加的 面向对象,写起来方便好理解一些. 其实就是个语法糖而已,他的这个功能,es5的语法都能实现. . 可以看看e ...

  9. ES6新特性_ES6语法糖-class中的getter和setter设置---JavaScript_ECMAScript_ES6-ES11新特性工作笔记038

    我们来看一下这个class中的getter和setter这个,在java中也用对吧, 很简单. 看一下我们给Phone类添加一个get price(){} 这个表示我给price属性,添加了一个get ...

  10. ES6新特性_ES6语法糖-子类对父类方法的重写---JavaScript_ECMAScript_ES6-ES11新特性工作笔记037

    然后我们再看,子类可以对父类方法进行重写. 可以看到我们这个父类,有个call 我可以打电话 我们子类也可以写一个和父类同样的一个方法,只要名字一样就相当于重写了 可以看到: 子类写了一个我可以进行视 ...

最新文章

  1. STM32中EXTI和NVIC的关系
  2. activiti的processEngine空指针异常
  3. 无锡易保Java面试笔试_易保面试题 - willim - BlogJava
  4. ◦将一个java文件变成Jar包的过程
  5. [转载]另眼看待变量间多重共线性
  6. python计算单词长度_Python - 按长度打印单词
  7. markdown 语法_Markdown 基本语法
  8. matlab怎么画二维热力图_[原创]Day3.箱线图和热力图的绘制
  9. 哈哈~我这个月工资涨了1万5!
  10. Maven的传递依赖
  11. 解决ajax中文乱码问题
  12. java数组base64编码,java将base64编码字符串还原为字节数组
  13. PHP7.2安装vld扩展
  14. iphone13怎么安装双卡(双卡功能)
  15. C++学习:后面有“::”的名称一定是类名或命名空间名
  16. 2020-12-01 剖析 Linux hypervisor
  17. 三角函数π/2转化_三角函数求值问题
  18. PDF转换器for mac
  19. 计算年龄:sql计算
  20. B-spline Curves 学习之B样条曲线的移动控制点、修改节点分析(7)

热门文章

  1. java nextline_Java编程语言基础的9根支柱
  2. Redis初学17:集群
  3. Java项目:在线考试系统(java+springboot+vue+jsp+mysql+maven)
  4. UUID.randomUUID()生成唯一识别码
  5. quickpcb添加pcb库_quickpcb使用说明
  6. Mac 升级系统 pod 命令无效
  7. 【一步步学小程序】2.列表展示
  8. 2019BATJ面试题详解:MyBatis+MySQL+Spring+Redis+多线程
  9. 解决jupyter中无自己创建的虚拟环境
  10. Android Handler 异步消息处理机制的妙用 创建强大的图片载入类