Java7新特性

Java7新特性

在最近举行的Devoxx大会上,Java SE首席工程师Mark Reinhol,针对新版的Java7做了一个最新发展方向的演讲。Mark称这次演讲的内容只是暂时的计划,并不表示Java7一定会跟着这个方向走。虽然如此,但是仍然在Java社区中引起了很多反响,特别是针对闭 包特性(Closures)的遗漏。
Hamlet D’Arcy提供了一个Mark演讲中有关Java7特性的总结。其中一些比较重要的变化包括:
1.JVM对动态语言的支持
2.更多新的I/O API已基本完成,包括真正同步的I/O(不仅仅是非阻塞I/O)和一个真正的文件系统API。
3. 安全重抛出——允许一个广泛的catch语句,编译器可以更加智能的基于try语句块中抛出的异常管理重新抛出。(我以前没有见过,不过看起来不错)
4.Null通过’?’语法检查,类似于Groovy...使开发人员避免一连串null检查。
5.与泛型实例化有关,但目前还不清楚这种推断会达到什么程度(我觉得越多越好)。
6.允许在catch语句中用逗号分割一系列异常类型。
7.Swing应用框架——仍然需要更简化以方便Swing应用开发。
8.特性的向前兼容(Java Kernal、QUickstarter、新Plug-in等)。
 
他同时提到了曾经考虑过但可能不会引入到Java 7的特性:
1.具体化泛型(Reified generics)
2.第一类属性(1st class properties)
3.操作符重载
4.BigDecimal语法
5.Bean绑定

下面看看代码吧:

1.对collections的支持

Java代码

List<String> list = new ArrayList<String>(); list.add("item"); String item = list.get(0); Set<String> set = new HashSet<String>(); set.add("item"); Map<String, Integer> map = new HashMap<String, Integer>(); map.put("key", 1); int value = map.get("key");

现在你还可以:

List<String> list = ["item"]; String item = list[0]; Set<String> set = {"item"}; Map<String, Integer> map = {"key" : 1}; int value = map["key"];

2.自动资源管理

原来:

BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); }    

现在:

try (BufferedReader br = new BufferedReader(new FileReader(path)) { return br.readLine(); } //You can declare more than one resource to close: try ( InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest)) { // code }  

3.对通用实例创建(diamond)的type引用进行了改进

原来:

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();  

现在:

Map<String, List<String>> anagrams = new HashMap<>();  

4.数值可加下划线

int one_million = 1_000_000;  

5.在switch中可使用string

String s = ... switch(s) { case "quux": processQuux(s); // fall-through case "foo": case "bar": processFooOrBar(s); break; case "baz": processBaz(s); // fall-through default: processDefault(s); break; }  

6.二进制文字

int binary = 0b1001_1001;    

7.简化了可变参数方法的调用

当程序员试图使用一个不可具体化的可变参数并调用一个*varargs* (可变)方法时,编辑器会生成一个“非安全操作”的警告

时隔一段时间,我看了Java7的相关文档发现,Java7拥有如下的一些新的特性。

首先是模块化特性:如果您安装和使用过NetBeans6.7的话,是不是会有一个很大的感觉,就是NetBeans6.7的启动速度比以前快了很多,当然并不是NetBeans已经使用了Java7,而是NetBeans将以前一启动就加载的功能划分成了很多的模块,第一次安装启动的时候,很多模块都没有加载,只是加载了一些最基本的功能模块,在随后的使用过程中,如果用到了某一种功能,就启用相应的模块,这样形成了一个按需加载的特点,当然随着加载的模块数量增加,启动的速度也会随之变慢。不过除非你要用其中的所有模块,否则总是比之前的版本速度要快。现在的 Java7也是采用了模块的划分方式来提速,一些不是必须的模块并没有下载和安装,因此在使用全新的Java7的虚拟机的时候会发现真的很快,当虚拟机需要用到某些功能的时候,再下载和启用相应的模块,这样使得最初需要下载的虚拟机大小得到了有效的控制。同时对启动速度也有了很大的改善。如果你对 OpenJDK的架构比较熟悉,你甚至可以定制JDK的模块。

其次是多语言支持:这里的多语言不是指中文英文之类的语言,而是说Java7的虚拟机对多种动态程序语言增加了支持,比如:Rubby、 Python等等。对这些动态语言的支持极大地扩展了Java虚拟机的能力。对于那些熟悉这些动态语言的程序员而言,在使用Java虚拟机的过程中同样可以使用它们熟悉的语言进行功能的编写,而这些语言是跑在功能强大的JVM之上的。

第三是开发者的开发效率得到了改善:Java7通过多种特性来增强开发效率。比如对语言本身做了一些细小的改变来简化程序的编写,在多线程并发与控制方面:轻量级的分离与合并框架,一个支持并发访问的HashMap等等。通过注解增强程序的静态检查。提供了一些新的API用于文件系统的访问、异步的输入输出操作、Socket通道的配置与绑定、多点数据包的传送等等。

最后是执行效率的提高,也是给人感觉最真切体验的特性:压缩了64位的对象指针,Java7通过对对象指针由64位压缩到与32位指针相匹配的技术使得内存和内存带块的消耗得到了很大的降低因而提高了执行效率。此外还提供了新的垃圾回收机制(G1)来降低垃圾回收的负载和增强垃圾回收的效果。G1垃圾回收机制拥有更低的暂停率和更好的可预测性。

其实如上的这些特性是在告诉我们,Java7改善了什么,速度为什么快了,当然这些特性将随着Java7的正式版发布而继续凸显其优势。

最后让我们对c语言佩服的同时, 也支持以下java吧. 还是有前途的,至少我们这一代java不会没落的. 现在很多系统都是用java写的。

Read more

Excel函数 | 相信这些也是你最常用这16个!

Excel函数 | 相信这些也是你最常用这16个!

作者:Old iron 来源:知乎专栏 下面是我在平时中经常用到的16个函数,可能有一些大家经常用到的我没提到,也可能有一些写的不周全的地方或者错误的地方,希望与大家一起多多学习哈~ 01 MID函数 函数定义:从一个文本字符串的指定位置开始,截取指定数目的字符 使用格式:MID(text, start_num, num_chars) 例子: 02 CONCATENATE函数 函数定义:将多个字符文本或单元格中的数据连接在一起,显示在一个单元格中 使用格式:CONCATENATE(text1,text2,……) 重点:也可以用&(和号)运算符代替函数CONCATENATE实现文本项的合并 例子: 03 AND函数 函数定义:检测所有的条件是否为真 使用格式:AND(logical1,logical2,……logical30) 注意事项: * 如果指定的区域中不包含逻辑值或数值时,函数AND返回错误值#VALUE!

By Ne0inhk
13.1 C语言链表的基本概念

13.1 C语言链表的基本概念

13.1 C语言链表的基本概念 * 13.1 C语言链表的基本概念 链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。链表允许在序列中间的任意位置高效地插入和删除元素,这使得它们在处理频繁变动的数据集合时非常有用。 链表的特点: 1. 动态大小:链表的大小可以在运行时动态变化,不需要预先分配固定大小的存储空间。 2. 数据和指针:每个节点通常包含两部分,一部分是存储数据的元素,另一部分是指向下一个节点的指针。 3. 灵活的内存使用:链表可以在堆上动态分配内存,不需要连续的内存空间。 4. 插入和删除的高效性:在链表中插入或删除节点只需要改变指针,不需要移动其他元素,这使得这些操作相对于数组来说更加高效。 链表的类型: 1. 单链表:每个节点包含一个指向下一个节点的指针,链表有一个头节点,最后一个节点的指针通常指向 NULL。 2. 双向链表:每个节点包含两个指针,一个指向前一个节点,一个指向下一个节点。 3. 循环链表:链表的最后一个节点的指针指向第一个节点,形成一个闭环。 链表的基本操作: 1. 创建节点:为

By Ne0inhk
13.2 C语言单链表的创建与操作

13.2 C语言单链表的创建与操作

13.2 C语言单链表的创建与操作 * 13.2 单链表的创建与操作 单链表是一种基本的数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。在C语言中,单链表通常通过结构体和指针来实现。 创建单链表 1. 定义节点结构体: typedef struct Node { int data; struct Node* next; } Node; 1. 创建新节点: Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); if (newNode == NULL) { // 错误处理:内存分配失败 return NULL; } newNode->data = data; newNode->next = NULL;

By Ne0inhk
刚刚用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....

刚刚用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....

作者:一个俗人 来源:https://my.oschina.net/u/169565/blog/4557279 最近华为鸿蒙OS 2.0正式开源!关于鸿蒙的教程其实网上也已经有一些尝鲜的小伙伴分享的相关文章了,编者我按照步骤一步步跑下来,整个流程还是非常简单的,尤其是对Android开发的小伙伴来说,从IDE到项目的创建及项目的编译安装简直是一模一样呀。我特么的都有点怀疑人生了...感兴趣的读者也可以试试哦。 再贴一下鸿蒙的源码地址:https://openharmony.gitee.com 咱们一起来跟着一位网友学习一下如何跑起来第一个“hello world”,原文如下: 1.前序 1.1 官网: https://www.harmonyos.com 网上搜索第一个不是官方是三方的 1.2.IDE下载位置: 源码编译的下载: https://device.harmonyos.com/cn/ide

By Ne0inhk