JDK各个版本的特性
1.JDK 1.5
- 1) 自动装箱和拆箱
- 2) 枚举
- 3) 静态导入
- 4 可变参数Varargs
语法格式是:
methodName([argumentList], dataType...argumentName);
- 5) 内省 Introspector
- 6) 泛型 Generic
- 7) For-Each循环
2.JDK 1.6
- 1) Desktop和SystemTray类
前者可以用来打开系统默认浏览器浏览指定的URL
打开系统默认邮件客户端给指定的邮箱发邮件
用默认应用程序打开或编辑文件(比如,用记事本打开以txt为后缀名的文件)
用系统默认的打印机打印文档;
后者可以用来在系统托盘区创建一个托盘程序
- 2) 使用JAXB2来实现对象与XML之间的映射
Java Architecture for XML Binding
使用注解实现
- 3) stAX
除了DOM和SAX之外的又一种处理XML文档的API
一种利用拉模式解析(pull-parsing)XML文档的API
通过提供一种基于事件迭代器(Iterator)的API让 程序员去控制xml文档解析过程,程序遍历这个事件迭代器去处理每一个解析事件,解析事件可以看做是程序拉出来的,也就是程序促使解析器产生一个解析事件 然后处理该事件,之后又促使解析器产生下一个解析事件,如此循环直到碰到文档结束符;
- 4) 使用Compiler API
动态编译Java源文件 跨平台
手动修改JSP后 可以使用Compiler API动态编译
- 5) 轻量级Http Server API
可以构建自己的嵌入式Http Server
它支持Http和Https协议,提供了HTTP1.1的部分实现
- 6) 插入式注解处理API
把method, package, constructor, type, variable, enum, annotation等Java语言元素映射为Types和Elements
Java语言的语义映射成为对象
javax.lang.model包下面可以看到这些类
在编译时而不是运行时处理Annotation
- 7) 用Console开发控制台程序
java.io.Console 类专用来访问基于字符的控制台设备
如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实 例.
8) 对脚本语言的支持:ruby, groovy, javascript
9) Common Annotations
10) 支持最新的windows vista系统的Windows Aero视窗效果
3.JDK 1.7
1) switch()可以使用字符串
2) <> 菱形运算符可以自动推断出泛型的类型
3) 自定义自动关闭类
实现AutoCloseable接口并且实现close()方法4) 新增取环境信息的工具方法
File System.getJavaIoTempDir() // IO临时文件夹
File System.getJavaHomeDir() // JRE的安装目录
File System.getUserHomeDir() // 当前用户目录
File System.getUserDir() // 启动java进程时所在的目录5) Boolean类型反转 空指针安全 参与位运算
Boolean Booleans.negate(Boolean booleanObj)
- 6) 两个char间的equals
boolean Character.equalsIgnoreCase(char ch1, char ch2)
7) 安全的加减乘除
8) 对集合的增强
采用[]、{}的形式存入对象
采用[]的形式按照索引、键值来获取集合中的对象
List<String> list=["item"]; //向List集合中添加元素
String item=list[0]; //从List集合中获取元素
Set<String> set={"item"}; //向Set集合对象中添加元素
Map<String,Integer> map={"key":1}; //向Map集合中添加对象
int value=map["key"]; //从Map集合中获取对象
9) 在Switch中可用String 本质还是整型 但是使用的是字符串的hashcode
10) 数值可加下划线
int one_million = 1_000_000;
- 11) 支持二进制文字
int binary = 0b1001_1001;
12) 简化了可变参数方法的调用
当程序员试图使用一个不可具体化的可变参数并调用一个varargs
(可变)方法时,编辑器会生成一个“非安全操作”的警告。13) 在try catch异常扑捉中,一个catch可以写多个异常类型,用”|”隔开
14) 可以不必要写finally语句来关闭资源,只要你在try()的括号内部定义要使用的资源
4. JDK 1.8
- 1) 接口的默认方法
允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法
interface Formula {
double calculate(int a);
default double sqrt(int a) {
return Math.sqrt(a);
}
}
2) Lambda 表达式
3) 函数式接口 @FunctionalInterface
“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。
- 4) 方法与构造函数引用
允许你使用 :: 关键字来传递方法或者构造函数引用
Converter<String, Integer> converter = Integer::valueOf;
Integer converted = converter.convert("123");
System.out.println(converted); // 123
converter = something::startsWith;
String converted = converter.convert("Java");
System.out.println(converted); // "J"
- 6) Lambda 作用域
可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。
- 7) 访问局部变量
final int num = 1;
Converter<Integer, String> stringConverter =
(from) -> String.valueOf(from + num);
stringConverter.convert(2); // 3
num可以不用声明为final 但是必须不可被后面的代码改变
8) 访问对象字段与静态变量
9) 访问接口的默认方法
lamada表达式无法访问到默认方法10) Date API
java.time下包含了一组全新的时间日期API- 1.Instant类也可以用来创建老的java.util.Date对象。
- 2.Timezones 时区
在新API中时区使用ZoneId来表示.
时区可以很方便的使用静态方法of来获取到.
时区定义了到UTS时间的时间差,在Instant时间点对象到本地日期对象之间转换的时候是极其重要的。 - 3.LocalDate 本地日期
11) Annotation 注解
支持多重注解
例 1: 使用包装类当容器来存多个注解(老方法
@interface Hints {
Hint[] value();
}
@Repeatable(Hints.class)
@interface Hint {
String value();
}
@Hints({@Hint("hint1"), @Hint("hint2")})
class Person {}
例 2:使用多重注解(新方法)
复制代码 代码如下:
@Hint("hint1")
@Hint("hint2")
class Person {}
Hint hint = Person.class.getAnnotation(Hint.class);
System.out.println(hint);
Hints hints1 = Person.class.getAnnotation(Hints.class);
System.out.println(hints1.value().length);
Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class);
System.out.println(hints2.length);