`

Java7新特性 (转)

    博客分类:
  • j2se
 
阅读更多
在最近举行的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的支持

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写的。



分享到:
评论

相关推荐

    JAVA1.5新特性

    JAVA 1.5的新特性是Java发展史上的一个重要里程碑,这一版本引入了一系列创新特性,旨在提升编程效率、增强代码安全性并简化开发流程。以下是对JAVA 1.5新特性的详细解析: ### 1. 泛型 (Generics) #### 概述 泛型...

    Java17新特性详解含示例代码(值得珍藏)

    【Java 17新特性详解含示例代码】 Java 17作为Java的最新版本,引入了一系列提升开发效率、性能和开发体验的新特性。以下是Java 17的主要新特性及其实现方式: 1. **增强的伪随机数生成器 (JEP 356)** Java 17...

    java5泛型新特性 pdf

    以下将详细阐述Java 5泛型的新特性: 1. **类型参数化**:泛型允许我们在类、接口和方法中定义类型参数。例如,`List&lt;E&gt;`中的`E`就是一个类型参数,代表某种未知的类型。当我们实例化列表时,可以指定`E`的具体类型...

    JAVA7新特性介绍(官方公布)中文版[参照].pdf

    Java 7是Java平台标准版的一个重要更新,它引入了一系列的新特性和改进,旨在提高开发者的效率、增强程序性能以及扩展平台的可用性。以下是Java 7的一些关键新特性: 1. **Nimbus Look & Feel**: Java 7引入了...

    java新特性简介.ppt

    Java语言的不断发展带来了许多新特性,使得编程更加高效和安全。以下是这些特性的详细说明: 1. **自动装箱、拆箱**: 自动装箱是指将基本数据类型自动转换为对应的包装类对象,而拆箱则是将包装类对象转换回基本...

    JAVA5/JAVA6新特性

    ### Java 5新特性 #### 1. **泛型(Generics)** 泛型是Java 5最重要的特性之一,它允许在类、接口和方法声明中使用类型参数,增强了类型安全,减少了强制类型转换,提高了代码的可读性和可维护性。 #### 2. **...

    JAVA5-6新特性列表.doc

    Java 5 和 Java 6 是两个重要的 Java 发行版本,它们引入了一系列的新特性和改进,极大地提升了开发效率和代码质量。下面将详细讲解这两个版本的关键特性。 Java 5: 1. **泛型**:泛型允许在类、接口和方法中使用...

    JAVA类的特性资料

    在Java中,类的特性主要包括以下几个方面: 1. **封装**:封装是面向对象编程的核心概念之一,它隐藏了对象的内部实现细节,只对外提供公共的访问方式。在Java中,我们通过访问修饰符(如public、private、...

    JDK-Mac系统和Windows系统安装及Java版本新特性(java9 - java19)

    本主题将深入探讨在Mac系统和Windows系统上安装JDK的过程,并详细解析Java从9到19版本的主要新特性。 一、JDK安装 1. Mac系统安装: - 使用Homebrew:在终端中输入`brew install AdoptOpenJDK`,然后通过`java -...

    java【第4章:数组与方法】_Java新特性对数组的支持

    在本章“数组与方法”中,我们将深入探讨Java如何支持数组以及在新版本中引入的一些特性。以下是对这些知识点的详细阐述: 一、数组的基础概念 1. 定义:数组是一个固定大小的内存块,用于存储同一类型的数据集合。...

    JAVA5新特性介绍

    Java 5.0 版本引入了许多创新...学习并熟练掌握这些Java 5的新特性,不仅能使代码更高效、更安全,还能提高开发效率,让你的Java编程能力与时俱进。在实际项目中应用这些特性,有助于编写出更加优雅、易于维护的代码。

    时间日期工具类(包含java8新特性).zip

    在这个"时间日期工具类(包含java8新特性).zip"压缩包中,我们有两个文件:DateUtil.java和DateUtils.java,它们很可能是自定义的工具类,用来扩展Java的标准日期处理功能。 首先,我们来看Java 8引入的新特性。在...

    java5.0新特性

    以下是对Java 5.0新特性的详细阐述: 1. **泛型(Generics)**:Java 5.0引入了泛型,允许在类、接口和方法声明中使用类型参数,以增强类型安全性和减少强制类型转换。泛型有助于防止在运行时出现...

    JDK1.6新特性搜集整理

    在Java世界中,每个版本的更新都会带来一系列的新特性,以增强其性能和开发者体验。JDK1.6,也被称为Java SE 6,是Java发展史上的一个重要里程碑,它引入了许多关键性的改进和功能。以下是对这些新特性的详细阐述: ...

    666.664.JAVA基础教程_动态代理与Java8新特性-Java8新特性内容概述(666).rar

    本教程聚焦于Java的基础,特别是动态代理和Java 8的新特性,这些都是现代Java开发中不可或缺的知识点。 首先,让我们深入理解Java动态代理。动态代理是Java提供的一种机制,允许我们在运行时创建一个实现一组给定...

    CPlus_to_Java_Converter;C++转java工具

    7. **标准库和第三方库**:C++和Java都有丰富的标准库,但并不完全兼容。转换器需要找到相应的Java库来替代C++的库函数,或者可能需要重新实现某些功能。 8. **可执行文件(exe)**:在C++中,编译后的代码可以生成...

    delphi(pas)转java

    总的来说,从Delphi转向Java涉及到语言特性的理解、代码结构的重构、库和API的替换,以及对新平台特性的掌握。这是一个复杂的过程,需要耐心和细致的工作。在转换过程中,保持代码清晰和可维护性,同时考虑未来扩展...

Global site tag (gtag.js) - Google Analytics