【JDK7】新特性(2) 语法
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) 语法相关推荐
- jdk7新特性学习笔记
jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...
- 浮点数,字符串入门,基本数据类型自动转换,JDK7新特性, 变量.
8.1 浮点型 **√ **float**类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求. √ ****double表示这种类型的数值精度是floa ...
- JDK7新特性之try-with-resources
JDK7新特性之try-with-resources 本节内容并非JDK8的新特性,而是JDK7的新特性.此处讲解是因为多数人并不知道. 传统方式在资源关闭时,需要对每个需要关闭的资源进行 手动调用c ...
- JDK7新特性详细说明及代码示例
在2011年7月28日,Oracle发布了JDK7的正式版.最近我从网上搜集了一些资料,把文字说明和代码示例结合起来,方便我们的学习. 下面我们来看看JDK7比6多了哪些新特性 1.访问文件系统 与之 ...
- ES6新特性(部分语法)
ES6新特性 文章目录 ES6新特性 1.0let关键字 1.1let小案例 1.2const关键字 1.3解构赋值 1.4模板字符串 1.5简化对象写法 1.6箭头函数 1.7箭头函数的案例 1.7 ...
- JDK7新特性简单翻译介绍
« 家庭特点里程碑 · 建立 日历 » JDK 7中 特点 这是由甲骨文正在开发的功能,和其他列表中,JDK 7中. 这些功能将建议列入中的Java SE 7平台JSR ,除了为实现特定的上市的. 评 ...
- JDK7新特性_JDK7的六个新特性
二进制字面量JDK7开始,终于可以用二进制来表示整数(byte,short,int和long).使用二进制字面量的好处是,可以使代码更容易被理解.语法非常简单,只要在二进制数值前面加 0b或者0B举例 ...
- ES6新特性_ES6语法糖class介绍与初体验_就是个语法糖而已---JavaScript_ECMAScript_ES6-ES11新特性工作笔记033
然后我们看es6中的class,es6中引入这个class这个概念,为了让js的写法更加的 面向对象,写起来方便好理解一些. 其实就是个语法糖而已,他的这个功能,es5的语法都能实现. . 可以看看e ...
- ES6新特性_ES6语法糖-class中的getter和setter设置---JavaScript_ECMAScript_ES6-ES11新特性工作笔记038
我们来看一下这个class中的getter和setter这个,在java中也用对吧, 很简单. 看一下我们给Phone类添加一个get price(){} 这个表示我给price属性,添加了一个get ...
- ES6新特性_ES6语法糖-子类对父类方法的重写---JavaScript_ECMAScript_ES6-ES11新特性工作笔记037
然后我们再看,子类可以对父类方法进行重写. 可以看到我们这个父类,有个call 我可以打电话 我们子类也可以写一个和父类同样的一个方法,只要名字一样就相当于重写了 可以看到: 子类写了一个我可以进行视 ...
最新文章
- STM32中EXTI和NVIC的关系
- activiti的processEngine空指针异常
- 无锡易保Java面试笔试_易保面试题 - willim - BlogJava
- ◦将一个java文件变成Jar包的过程
- [转载]另眼看待变量间多重共线性
- python计算单词长度_Python - 按长度打印单词
- markdown 语法_Markdown 基本语法
- matlab怎么画二维热力图_[原创]Day3.箱线图和热力图的绘制
- 哈哈~我这个月工资涨了1万5!
- Maven的传递依赖
- 解决ajax中文乱码问题
- java数组base64编码,java将base64编码字符串还原为字节数组
- PHP7.2安装vld扩展
- iphone13怎么安装双卡(双卡功能)
- C++学习:后面有“::”的名称一定是类名或命名空间名
- 2020-12-01 剖析 Linux hypervisor
- 三角函数π/2转化_三角函数求值问题
- PDF转换器for mac
- 计算年龄:sql计算
- B-spline Curves 学习之B样条曲线的移动控制点、修改节点分析(7)
热门文章
- java nextline_Java编程语言基础的9根支柱
- Redis初学17:集群
- Java项目:在线考试系统(java+springboot+vue+jsp+mysql+maven)
- UUID.randomUUID()生成唯一识别码
- quickpcb添加pcb库_quickpcb使用说明
- Mac 升级系统 pod 命令无效
- 【一步步学小程序】2.列表展示
- 2019BATJ面试题详解:MyBatis+MySQL+Spring+Redis+多线程
- 解决jupyter中无自己创建的虚拟环境
- Android Handler 异步消息处理机制的妙用 创建强大的图片载入类