下面是Java 1.7 里新出现的功能的一些用法例子:
对集合的支持
创建List / Set / Map 时写法更简单了。
[java]
List< String> list = ["item"];
String item = list[0];
Set< String > set = {"item"};
Map< String,Integer > map = {"key" : 1};
int value = map["key"];
[/java]
对资源的自动回收管理
下面的代码看起来有点麻烦 … 不是吗
[java]
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
[/java]
相信你一定会喜欢下面这种写法
[java]
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
[/java]
泛型实例创建过程中类型引用的简化
当声明你的对象的接口是,你肯定是不想重复指明泛型类型
看看下面的这种写法多好呀…
[java]
Map<String,String> hello = new HashMap<>();
[/java]
在数字中使用下划线
[java]
int billion = 1_000_000_000;
[/java]
我不知道这个能有多少用处
对字符串进行switch case
[java]
String availability = "available";
switch(availability) {
case "available":
//code
break;
case "unavailable":
//code
break;
case "merged":
//code
default:
//code
break;
}
[/java]
注意:在把字符串传进Switch case之前,别忘了检查字符串是否为Null。
二进制符号
你可用作二进制字符前加上 0b 来创建一个二进制类型。
[java]
int binary = 0b1001_1001;
[/java]
一个catch里捕捉多个异常类型
[java]
try {
Here comes your code….
}
catch(IOException | NullPointerException | ……….) {
}
[/java]
如果有人能说出更多的新特征,那就更好了。我相信里面有更多的很酷的新东西。
说实在的JAVA7很多新特性说出来给其他语言的使用者听估计反应是:哦~~我们本来就有。。。。
是的呀,语法糖.
方便多了~顶~
@huansinho:但是 java 这么强大的虚拟机,别的语言就不一定有了。
.NET 也比较强大,这些特征.NET似乎都有了。比如 using。
以前都觉得.NET很大程度上模仿Java,现在反了呢。
恩,像C#里就有而Java没有的。相信随着时间的推移,.NET和Java会相互渗透,他们有共同的目标——生存与发展。
补充Sweet:C#中不仅早就有了using,而且using比try来得更通俗易读,using表示在“使用”一个资源,稍后会自动释放,但try是不是别扭了呢?
看看Scala就知道java本来可以做到多好。
int billion = 1_000_000_000;
在程序中写一个大数字的时候,这个特性的好处就体现出来了。尤其是下面提到的二进制写法,如果没有下划线的支持,真是看不清楚啊。
集合的新语法支持真是非常方便。
对字符串的 switch 真是支持的太晚了。
但是硬编码本来也不是啥好习惯啊,还是觉得用到的机会不多。
这个下划线确实不错,不过集合的新语法在借鉴C#,但感觉没有C#的直观,
List list = [“item”];
这句我一不小心就误以为是数组。
还有这个:Map hello = new HashMap();
相比这种语法,我还更喜欢C#的:
var hello = new HashMap();
(编译器会推断自动var的类型)
对字符串进行switch case这个方便多了。
除了switch和数字下划线, 似乎python都有。
Map hello = new Map();
这句不对,Map是一个接口,不可以实例化.
应该是这样Map hello = new HashMap();
这个是自动类型推断1.7新特性
的确不多,谢谢提醒,已改正
在编程方便性方面java越来越像PHP了,在面向对象方面PHP越来越像JAVA了
try {
Here comes your code….
}
catch(IOException | NullPointerException | ……….) {
}
这样写虽然方便了,但是有点奇怪。
说实在的,还不如直接用scala呢
我这么写的时候碰到compile错误。 什么原因呢,奇怪…
Map map = {“key” : 1};
Might have been postponed to 8… What a pity
这个功能好像是推迟到Java 1.8 里才能实现了
越来越多其他语言的影子
都是些小修小改的语法糖,对java都失望了。
这对java来说是很大的进步了。 要向一个庞大的系统里面加新东西, 挺困难吧。 如果JAVA 有lisp类的macro, 这些就可以自己实现了。
不论是学习其他语言,还是怎么,说明java是在进步的,而且越来越方便了,happy
好呀。新功能很有用。
期待。。。期待。。。
java程序员慢慢也退化了。。。。
不得不说,这些语法我们Python早有了。
貌似很多新特性在其他语言里面早就实现了
都还可以,不过我真的很需要c#的泛型。
c#的泛型什么时候才能加进来啊?
就第一条,我编译了一下,不行啊