大家好,欢迎来到IT知识分享网。
JDK 1.7部分新特性
1)switch支持String类型 本质上是对int类型的匹配,
实现原理为:通过case后面的str对象调用hashcode()方法,得到一个int类型的hash值,然后用这个hash值来唯一标识这个case.当匹配时,首先调用这个字符串的hashcode()方法,获得一个hash值,用这个hash值与case匹配,若没有则不存在,若有则接着调用equals()方法进行匹配。String变量不能为null ,case后的字符串也不能为null ,否则会出现NullPointerException.
2)可以在catch中捕获多个异常
3)对数值字面量进行了改进
- 增加了二进制字面量的表示 0B001 0b001
- 在数字中可以添加分隔符 123_456 下划线只能用在数字中间 编译时被去掉
4)使用泛型的时候增加了类型推断机制
java7之前
Map<String,String> map = new HashMap<String,String>();
java7引进类型推断后
Map<String,String> map = new HashMap<>();
5)增加了 try-with-resources语句 (声明一个或多个资源的try语句)
资源指在使用完成后,必须关闭释放的对象,try-with-resources语句确保在该语句执行之后关闭每个资源
try(InputStream fis = new FileInputStrean("input.txt");){
while(fis.read()!=1){
System.out.println(fis.read());
}
}catch(Exception e){
e.printStackTrace();
}
6)增加了fork/join框架来增强对处理多核并行计算的支持
http://ifeve.com/talk-concurrency-forkjoin/(详述了 fork 和 join框架)
应用场景:如果一应用能被分解为多个子任务 并且组合多个子任务的结果就能获得最终答案
fork把大任务分割 join合并计算结果
JDK 1.8 部分新特性
1)增加了 Lambda表达式的支持 Lambda表达式是一个匿名函数 允许把函数作为一个方法的参数
示例
Arrays.AsList(2,8,1).forEach(i->System.out.println(i)); //1
Arrays.AsList(2,8,1).forEach((Integer i)->System.out.println(i)); // 2
在java8以前 对于列表的排序 如果有自定义的类 则需要制定自定义的排序方法
Person []people = {
new Person("Iack",22),new Person("Tony",35)};
Arrays.sort(people,new Comparator<Person>(){
//自定义排序方法 new 一个Conparator 重写compare方法
@Override
public int compare(Person a,Person b){
return a.getAge()-b.getAge();
}
});
for(Person p:people){
System.out.println(p);
}
Lambda表达式
Arrays.sort(people,(Person a,Person b)->a.getAge()-b.getAge()); Arrays.sort(people,(a,b)->a.getAge()-b.getAge());
Lambda表达式是通过函数式接口实现的 (只有一个方法的普通接口)。函数式接口可以隐式的转换为Lambda表达式,为了与普通的接口区分开,增加了注解@FunctionalInterface
@FunctionalInterface
interface fun{
void f();
}
2)接口增加了方法的默认实现和静态方法 JDK1.8通过使用关键字 default可以给接口中的方法添加默认实现,此外,接口中还可以定义静态方法。
interface In8{
void f();
default void g(){
System.out.println("default");
}
static void h(){
System.out.println("static");
}
}
引入接口默认方法实现 是为了实现接口升级 在原有的设计中,如果想要升级接口,例如给接口中添加一个新的方法,会导致所有实现这个接口的类都需要被修改。
3)方法引用 方法引用指的是可以直接使用java类或对象的方法
Arrays.sort(people,Comparator.comparing(Person::getAge));
方法引用共有下面四种方式
- 引用构造方法 ClassName::new
- 引用类静态方法 ClassName::methodName
- 引用特定类的任意对象方法 ClassName::methodName
- 引用某个对象的方法 instanceName::methodName
4)注解
- JDK 1.5中引入了注解机制 但有限制 相同注解在同一位置只能声明一次 JDK 1.8中引入了重复注解机制后,相同的注解在同一个地方可以声明多次
- 扩展注解使用范围 可以给局部变量 泛型 和方法异常等提供注解
5)加强了类型推测机制
6)参数名字 在编译时增加 -parameters选项 以及增加反射API 与 Parameter.getName()方法实现了获取方法参数名的功能
7)新增optional类 处理空指针
8)新增Stream类 和函数式编程统一
9)日期新特性
10)增加了调用javaScript的引擎
11)Base64 字符编码格式 用来作为电子邮件 或webService附件的传输编码
12)并行数组
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24310.html