jdk8
- Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。
1 | package jdk8; |
- 方法引用−方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
1 | 构造器引用:它的语法是Class::new |
- 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可实现默认方法
1 | package jdk8; |
Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
增加了一些新的 IO/NIO 方法,使用这些方法可以从文件或者输入流中获取流(java.util.stream.Stream),通过对流的操作,可以简化文本行处理、目录遍历和文件查找。
新增的 API 如下:
BufferedReader.line(): 返回文本行的流 Stream
File.lines(Path, Charset):返回文本行的流 Stream
File.list(Path): 遍历当前目录下的文件和目录
File.walk(Path, int, FileVisitOption): 遍历某一个目录下的所有文件和指定深度的子目录
File.find(Path, int, BiPredicate, FileVisitOption… ): 查找相应的文件
见http://blog.csdn.net/aloneload/article/details/78091860- Date Time API − 加强对日期与时间的处理。
java.time 中包含了所有关于时钟(Clock),本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类
1 | public class DateTimeApi { |
- Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
Optional将对象和null包装起来,使得null有迹可循
1 | package jdk8; |
- Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn
javascript引擎,它允许我们在JVM上运行特定的javascript应用。
- 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
1 | jdeps LambdaPractice.class |
jdk7
- 在Switch中可用String
1 | String s = "java8"; |
- 数值可加下划线用作分隔符(编译时自动被忽略)
1
int add=1_342_000;
- 增强的try
资源管理器自动调用资源的close()函数。和Python里的with语句差不多,再也不用担心忘关资源了1
2
3
4
5
6
7
8
9
10// try-with-resource
try (BufferedReader br = new BufferedReader(new FileReader("data/nio-data.txt"))) {
String line;
while((line=br.readLine())!=null) {
System.out.println(line);
}
} catch (IOException|NumberFormatException e) {//此处演示多个异常
e.printStackTrace();
}
另网传的对Java集合(Collections)的增强支持,可直接采用[]、{}的形式存入对象,采用[]的形式按照索引、键值来获取集合中的对象。此特性并不支持
jdk5
- 自动装箱与拆箱
1 | int a = 4; |
- 枚举
单例模式最好的实现
1 | enum Version { |
- 静态导入
1 | import static java.lang.Math.*; |
可变参数
1
2
3
4
5
6
7
8
9
10
11
12// 可变参数
private static int sum(int... intlist) {
int sum;
sum = 0;
for (int i = 0; i < intlist.length; i++) {
sum += intlist[i];
}
return sum;
}
//System.out.println(sum(1, 2, 3));
//System.out.println(sum(1, 2));内省,主要用于操作JavaBean中的属性,通过getXxx/setXxx。一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
1 | People people = new People(1,"zhangsan"); |
- 泛型(包括通配类型/边界类型等)
- For-Each循环
- 注解