1.5
1. 自动装箱与拆箱:
2. 枚举(常用来设计单例模式)
3. 静态导入
4. 可变参数
5. 内省(Introspector)
是 Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新 的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用来访问某个属性的getter /setter方法,通过这些API可以使你不需要了解这个规则(但你最好还是要搞清楚),这些API存放于包java.beans中。
一 般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器 (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来 调用这些方法。
6. for-each
1.6
1. Web服务元数据
2. 脚本语言支持(如支持 ruby, groovy, javascript)
3. JTable的排序和过滤
4. 更简单,更强大的JAX-WS
5. 轻量级Http Server
6. 嵌入式数据库 Derby
7. 插入式注解处理
8. Desktop类和SystemTray类
9. StAX是另一种处理XML文档的API
10. 使用JAXB2来实现对象与XML之间的映射
11. 用Console开发控制台程序
1.7
1. switch中可以使用字串(String)了
2. 对Java集合(Collections)的增强支持,而不再限于数组
在JDK1.7之前的版本中,Java集合容器中存取元素的形式如下:
以List、Set、Map集合容器为例:
在JDK1.7中,摒弃了Java集合接口的实现类,如:ArrayList、HashSet和HashMap。而是直接采用[]、{}的形式存入对象,采用[]的形式按照索引、键值来获取集合中的对象。
3. 数值可加下划线
例如:int one_million = 1_000_000;
4. 新增一些取环境信息的工具方法
5. Boolean类型反转,空指针安全,参与位运算
6. 两个char间的equals
7. 安全的加减乘除
8. map集合支持并发请求,且可以写成 Map map = {name:"xxx",age:18};
9. 支持二进制文字
例如:int binary = 0b1001_1001;
10. 简化了可变参数方法的调用
1.8
1. 允许在接口中有默认方法实现
2. Lambda表达式
3. 函数式接口
4. 方法和构造函数引用
5. Lambda的范围
6. 内置函数式接口
7. Streams
8. Parallel Streams
9. Map
10. 时间日期API
11. Annotations
12. 访问局部变量
我们可以直接在lambda表达式中访问外层的局部变量:
复制代码 代码如下:
final int num = 1;
Converter<Integer, String> stringConverter =
(from) -> String.valueOf(from + num);
stringConverter.convert(2); // 3
但是和匿名对象不同的是,这里的变量num可以不用声明为final,该代码同样正确:
复制代码 代码如下:
int num = 1;
Converter<Integer, String> stringConverter =
(from) -> String.valueOf(from + num);
stringConverter.convert(2); // 3
不过这里的num必须不可被后面的代码修改(即隐性的具有final的语义),例如下面的就无法编译:
复制代码 代码如下:
int num = 1;
Converter<Integer, String> stringConverter =
(from) -> String.valueOf(from + num);
num = 3;
在lambda表达式中试图修改num同样是不允许的。
七、访问对象字段与静态变量
和本地变量不同的是,lambda内部对于实例的字段以及静态变量是即可读又可写。该行为和匿名对象是一致的:
复制代码 代码如下:
class Lambda4 {
static int outerStaticNum;
int outerNum;
void testScopes() {
Converter<Integer, String> stringConverter1 = (from) -> {
outerNum = 23;
return String.valueOf(from);
};
Converter<Integer, String> stringConverter2 = (from) -> {
outerStaticNum = 72;
return String.valueOf(from);
};
}
}
1.9
1. Jigsaw 项目;模块化源码
2. 简化进程API
3. 轻量级 JSON API
4. 钱和货币的API
5. 改善锁争用机制
6. 代码分段缓存
7. 智能Java编译, 第二阶段
8. HTTP 2.0客户端
9. Kulla计划: Java的REPL实现
1. 自动装箱与拆箱:
2. 枚举(常用来设计单例模式)
3. 静态导入
4. 可变参数
5. 内省(Introspector)
是 Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新 的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用来访问某个属性的getter /setter方法,通过这些API可以使你不需要了解这个规则(但你最好还是要搞清楚),这些API存放于包java.beans中。
一 般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器 (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来 调用这些方法。
6. for-each
1.6
1. Web服务元数据
2. 脚本语言支持(如支持 ruby, groovy, javascript)
3. JTable的排序和过滤
4. 更简单,更强大的JAX-WS
5. 轻量级Http Server
6. 嵌入式数据库 Derby
7. 插入式注解处理
8. Desktop类和SystemTray类
9. StAX是另一种处理XML文档的API
10. 使用JAXB2来实现对象与XML之间的映射
11. 用Console开发控制台程序
1.7
1. switch中可以使用字串(String)了
2. 对Java集合(Collections)的增强支持,而不再限于数组
在JDK1.7之前的版本中,Java集合容器中存取元素的形式如下:
以List、Set、Map集合容器为例:
在JDK1.7中,摒弃了Java集合接口的实现类,如:ArrayList、HashSet和HashMap。而是直接采用[]、{}的形式存入对象,采用[]的形式按照索引、键值来获取集合中的对象。
3. 数值可加下划线
例如:int one_million = 1_000_000;
4. 新增一些取环境信息的工具方法
5. Boolean类型反转,空指针安全,参与位运算
6. 两个char间的equals
7. 安全的加减乘除
8. map集合支持并发请求,且可以写成 Map map = {name:"xxx",age:18};
9. 支持二进制文字
例如:int binary = 0b1001_1001;
10. 简化了可变参数方法的调用
1.8
1. 允许在接口中有默认方法实现
2. Lambda表达式
3. 函数式接口
4. 方法和构造函数引用
5. Lambda的范围
6. 内置函数式接口
7. Streams
8. Parallel Streams
9. Map
10. 时间日期API
11. Annotations
12. 访问局部变量
我们可以直接在lambda表达式中访问外层的局部变量:
复制代码 代码如下:
final int num = 1;
Converter<Integer, String> stringConverter =
(from) -> String.valueOf(from + num);
stringConverter.convert(2); // 3
但是和匿名对象不同的是,这里的变量num可以不用声明为final,该代码同样正确:
复制代码 代码如下:
int num = 1;
Converter<Integer, String> stringConverter =
(from) -> String.valueOf(from + num);
stringConverter.convert(2); // 3
不过这里的num必须不可被后面的代码修改(即隐性的具有final的语义),例如下面的就无法编译:
复制代码 代码如下:
int num = 1;
Converter<Integer, String> stringConverter =
(from) -> String.valueOf(from + num);
num = 3;
在lambda表达式中试图修改num同样是不允许的。
七、访问对象字段与静态变量
和本地变量不同的是,lambda内部对于实例的字段以及静态变量是即可读又可写。该行为和匿名对象是一致的:
复制代码 代码如下:
class Lambda4 {
static int outerStaticNum;
int outerNum;
void testScopes() {
Converter<Integer, String> stringConverter1 = (from) -> {
outerNum = 23;
return String.valueOf(from);
};
Converter<Integer, String> stringConverter2 = (from) -> {
outerStaticNum = 72;
return String.valueOf(from);
};
}
}
1.9
1. Jigsaw 项目;模块化源码
2. 简化进程API
3. 轻量级 JSON API
4. 钱和货币的API
5. 改善锁争用机制
6. 代码分段缓存
7. 智能Java编译, 第二阶段
8. HTTP 2.0客户端
9. Kulla计划: Java的REPL实现