1 switch case 增加字符串类型,原理根据字符串hashcode以及string.equal比较
2 数值字面量改进
新增二进制数值字面量 0b000004,在数值中间新增下划线方便阅读2000_000
3 异常处理
增加addSuppressed 能够在触发异常后,通过该方法将finally中的异常添加保存进去
改进了catch子句的语法,允许在其中指定多种异常
4 try-with-resource语句
管理一个资源
public class CustomeResource implements AutoCloseable {

@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创建泛型对象调用构造方法时不需要显示声明类型,直接用<>代替,具体类型通过对象引用类型来进行判断