1 switch case 增长字符串类型,原理根据字符串hashcode以及string.equal比较
2 数值字面量改进
新增二进制数值字面量 0b000004,在数值中间新增下划线方便阅读2000_000
3 异常处理
增长addSuppressed 可以在触发异常后,经过该方法将finally中的异常添加保存进去
改进了catch子句的语法,容许在其中指定多种异常
4 try-with-resource语句
管理一个资源
public class CustomeResource implements AutoCloseable {java
@Override
public void close() throws Exception {
// TODO Auto-generated method stub
System.out.println("进行资源释放");
}正则表达式
public void useCustomeResource() throws Exception{
try(CustomeResource resource=new CustomeResource()){
System.out.println("使用资源");
}
}
}
管理两个资源
try(InputStream input=new FileInputStream(fromPath);
OutputStream output=new FileOutputStream(toPath)
){
byte[] buffer=new byte[8192];
int len=-1;
while((len=input.read(buffer))!=-1){
output.write(buffer,0,len);
}
}
5 在虚拟机中增长对动态语言的支持
MethodType
针对原来的 invokespecial invokevirtual invokeinterface invokestatic增长了更加灵活的invokedynamic指令
6
6.1数据库访问
6.1.1 try-with-resource语句使用在数据库资源释放上
6.1.2 对RowSet的实现对象的建立作了更新,工厂方式建立,ResultSet中getObject方法时,能够直接把结果类型传递进去等
6.1.3 数据库链接超时与终止,在connection接口中新增setNetworkTimeout和abort两个方法数据库
6.2
6.2.1基本类型包装类增长了compare方法,同时字符串内部化技术(包含相同字符串引用的相同的内部对象)被扩大到-128~127
6.2.2经过新增ProcessBuilder.Redirect类对进程的输入和输出重定向方式进行了统一,提供了两种重定向类型,一种是原来的管道式,一种是继承式,其余三种是与文件相关的
6.2.3禁止了Thread的clone方法
6.3
6.3.1java.util中新增工具类Objects,Objects.compare相对对象的compare方法会对null进行判断处理;Objects.equals;Objects.deepEqual;Objects.hash和Objects.hashCode结果不一样;Objects.toString
6.3.2正则表达式支持命名捕获分组,原来对捕获分组的引用只支持出现顺序的数字,如今能够给每一个分组添加名字;对正则表达式新增\x来直接表示,\x和\u使用方式相似,只是容许表示的范围更广
6.3.3java.util.zip 容许选择压缩时缓存的中间结果的输出方式,也支持显示的制定压缩文件的文件名和注释所用的字符集;XMLEncoder增长构造方法,能够更加精细的控制保存行为
6.3.4获取beaninfo时,定义获取过程当中包含哪些类的信息或者获取类中的哪些信息,java7后能够同时配置使用两项配置功能数组
7 多线程
7.1 java.util.concurrent包新增fork/join框架,相似map/reduce,目的是更好的利用多核和多处理器并行处理;在fork/join框架中,
区别于别的框架的在某个子问题遇阻时会处于等待状态该框架会主动查找其余还没有运行的子问题来执行,另外在每一个子问题中应该避免使用sychonized关键词或其余方式进行同步,
也不该该使用阻塞式I/O操做或过多的访问共享变量;惟一的同步只应该发生在子问题和建立它的父问题之间
7.2 新增多阶段线程同步工具,Phaser类的特色是把多个线程协做执行的任务划分红多个阶段,所提供的比之前的倒数闸门和循环屏障强
7.3 ThreadLocalRandom类中的随机数是使用ThreadLocal类来实现的,避免了竞争问题缓存
8 泛型
引入泛型的动机是让开发人员更安全地使用Java标准库中的集合类
java中除了枚举类型、匿名内部类、异常类型以外,其余类型均可以添加形式类型参数成为泛型类型
类型擦除是java中泛型的实现方式,泛型是在编译器这个层次实现的,在java代码中声明的泛型类信息在编译过程当中会被擦除,只保留不带类型参数的形式;
java虚拟机在运行字节码时不知道泛型类型的存在,字节码中包含了泛型类型相关信息,在执行时时不被使用的
数组类型不一样于集合类型的一个重要特征是数组是协变的,eg一个数组元素类型是另外一个数组元素类型的子类型,那这个数组类型也是另外一个数组类型的子类型,这种协变关系对于集合类对象是不存在的,缘由在于类型擦除
在java7建立泛型对象调用构造方法时不须要显示声明类型,直接用<>代替,具体类型经过对象引用类型来进行判断安全