java jdk1.5-1.6-1.7新特性

1.5新特性

1.静态导入(import static

import语句可以导入一个类或是某个包中的所有类。

import static 语句可以导入一个类中的某个静态方法或是所有静态方法。

例如:

Math类提供了很多于数学运算的静态方法,通常情况下我们是以Math.abs();这样的方式来进行调用函数的。但是我们可不可以只写出adb();

JDK1.5之后,可以使用import static 语句导入一个类中的某个静态方法或是所有静态方法。这是JDK1.5的新特性之一。

例如:

import static java.lang.Math.abs;就可以直接写一个abs();函数。

import static java.lang.Math.*; 就可以直接调用Math类中的所有静态方法。

 

2.泛型(Generic

JDK1.5之前,在Java集合容器中(如:List)可以讲任何类型的对象加入到其中,此时被加入的对象被视为Object来看待。当从集合容器取出对象时,需要程序员自行保证对象类型的强制转换。如下:

JDK1.5新特性 - CH - 已经开始…

这段代码中很显然List对象中的类型不匹配,但JDK1.5之前会编译通过,运行时才会报错,这样在开发过程中很不好。所以JDK1.5引入了泛型(Generic)的概念。在看下面的代码:

JDK1.5新特性 - CH - 已经开始…

    泛型的引入在很大程度上避免了程序员自行保证集合容器中存取数据的强制转换。

 

3.For-Each循环(增强型for循环)

JDK1.5中,For-Each循环加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为:

JDK1.5新特性 - CH - 已经开始…

4.自动装包/拆包(Autoboxing/unboxing

自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
  自动装包:基本类型自动转为包装类.(int >> Integer)
  自动拆包:包装类自动转为基本类型.(Integer >> int)

5.枚举(Enums

JDK1.5加入了一个全新类型的枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。如下:

JDK1.5新特性 - CH - 已经开始…

之后,可以这样使用:

Gender gender = Gender.male;

可以对枚举进行遍历,枚举类型提供了两个静态方法values()valueOf()

JDK1.5新特性 - CH - 已经开始…

 

6.可变参数(Varargs

可变参数使程序员可以声明一个接受可变数目参数的方法(类似于多个方法重载,只不过是可变参数提供一个方法实现多个方法的重载,变得只是方法其中的参数)

注意可变参数必须是函数声明中的最后一个参数。

比如:我们编写一个简单的打印方法,以传统的方式实现方法重载:

JDK1.5新特性 - CH - 已经开始…

 

下面使用可变参数来实现这些方法的重载:

JDK1.5新特性 - CH - 已经开始…

       


调用方法:

Write("abc",123,new ArrayList());  // 当然其中的参数可以是任意类型,任意多个

 // 这就很方便的实现了方法重载 

输出:

java.lang.String
     java.lang.Integer

     java.util.ArrayList


1.6新特性:


1.DestTop类和SystemTray

前者用于调度操作系统中的一些功能,例如:

· 可以打开系统默认浏览器指定的URL地址;

· 打开系统默认邮件客户端给指定的邮箱发信息;

· 用默认程序打开或编辑文件;

· 用系统默认的打印机打印文档。

后者可用来在系统托盘区创建一个托盘程序

 

2.使用JAXB2来实现对象与XML之间的映射

JAXBJava Architecture for XML Binding的简写。JAXB是一个业界的标准,是一项可以根据XML Schema产生Java类的技术JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
原来JAXBJava EE的一部分,在JDK6中,SUN将其放到了Java SE

 

3.StAX

StAXJDK1.6中除了DOMSAX之外的有一种处理XML文档的API

StAXThe Streaming API for XML的缩写由于JDK6.0中的JAXB2JAX-WS 2.0都会用到StAX所以Sun决定把StAX加入到JAXP家族当中来,并将JAXP的版本升级到1.4. 

JDK6里面JAXP的版本就是1.4JAXPJava API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口。

 

4.使用Complier API

现在我们可以用JDK1.Compiler API动态编译Java源文件Compiler API结合反射功能就可以实现动态的产生Java代码并编译执行这些代码,有点动态语言的特征。

这个特性对于某些需要用到动态编译的应用程序相当有用, 比如JSP Web Server,当我们手动修改JSP后,是不希望需要重启Web Server才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件

 

5.轻量级的Http Server API

JDK6 提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,支持HttpHttps协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现

 

6.插入式注解处理API(Pluggable Annotation Processing API)

JSR JSRJava Specification Requests的缩写,意思是Java 规范请求Annotation Processor在编译期间而不是运行期间处理Annotation, Annotation Processor相当于编译器的一个插件,所以称为插入式注解处理

 

7.Console开发控制台程序

JDK6中提供了java.io.Console 类专用来访问基于字符的控制台设备你的程序如果要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳

 

8.对脚本语言的支持

: ruby, groovy, javascript

 

9.Common Annotations

Common annotations原本是Java EE 5.0规范的一部分,现在SUN把它的一部分放到了Java SE 6.0.随着Annotation元数据功能加入到Java SE 5.0里面,很多Java 技术(比如EJB,Web Services)都会用Annotation部分代替XML文件来配置运行参数保证Java SEJava EE 各种技术的一致性.




1.7新特性:

想必做Java的技术人员们都非常关心Java 7在2010年会有哪些新的进展,这个问题起源于今年年底即将发布的Java 7,那么这些新的特性更新对我们有哪些好处、该如何使用、性能如何,都是大家密切关注的问题。

这里的内容主要包括其最 新更新、一些代码实例、跟以前版本的Java进行性能比较需要参考的一些基准、以及什么时候它才会发布等信息。

首先,让我们来看最重要 的事情。为了确定JDK 7中有哪些语言方面的微小变化,有关人员建立了一个名叫Project Coin的项目。描述了最终的五个变化(比五个多一点)。

Java 7更新内容如下所示:

◆允许在 switch中使用字符串

  ◆自动资源管理

  ◆通用实例创建来改进类型推断(diamond)

  ◆简化 的Varargs方法调用

  ◆更好的整型文字综合性建议

  ◆Collections集合的语言支持

  ◆JSR292的语言支持

在the OpenJDK 7特性页面中,你还可以看到其他的功能。

这些功能分为不同的种类:

◆虚拟机(VM)

  ◆压缩的64位对象指针

  ◆G1垃圾回收器GC(G1)

  ◆JSR 292:非Java语言的虚拟机支持(动态调用,InvokeDynamic)

语言方面(lang)

◆SR 294:模块化编程的语言以及虚拟机支持

  ◆JSR 308:Java类型注释

  ◆语言微小增强(我所谈论的 Project Coin)

  ◆JSR TBD: Project Lambda

内核(core)

◆模块化(Jigsaw项目)

  ◆对类加载器的结构进行升级

  ◆关闭URLClassLoader的方法

  ◆Unicode 5.1标准

  ◆并行以及集合的升级(jsr166y)

  ◆JSR 203:Java平台(NIO.2)的更多新型I/O API

  ◆SCTP (流控制传输协议,Stream Control Transmission Protocol)

  ◆SDP (套接字直接协议,Sockets Direct Protocol)

  ◆椭圆曲线加密技术(ECC)

客户端(client)

◆Java 2D的XRender管道

  ◆转发端口6u10部署特性

  ◆为6u10图形功能创建新的平台API

  ◆Swing的Nimbus外观和感觉

  ◆Swing的JLayer元件

网络(web)

◆ 更新XML的栈

就像你所看到的,这涉及了很多东西。几个月前,我亲自尝试了新的Garbage Collector (GC),其性能表现给我留下了非常深刻的印象。不幸的是,JVM几个小时就会崩溃一次,所以这个产品不能使用JVM。虽然在Java 1.6中也可以使用这个GC,但也会出现同样的问题,经常会出现崩溃。

我想,这就是Java1.7增加新特性的原因。那么,现在我们最好去看一些代码实例。

Java 7新特性的代码实例

下面列出的大多数例子都是来源于Joe Wright博客中(Java7中的新语言特性)的高水平文章。

集合的语言支持

在这里我们主要讲的 是,当创建一个List、Set或者Map的时候,你怎样尽量少写代码。你不必先实例化Object,然后再给Collection添加元素。你现在只需 1行代码就可以完成。

List list = ["item"];

String item = list[0];

  Set set = {"item"};

  Map map = {"key" : 1};

  int value = map["key"];

自动资源管理

由于try / catch语句的原因,冗长的代码令人非常头痛。你或许会喜欢这个全新的特性。

实际上,下面这些代码:

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();

  }

通用实例创建来改进类型推断(diamond)

当你把对象的接口申明指定成范型后,你在对象实例化时不得不再指定一次。现 在,你不必如此了,因为你可以这样:

Map> map = new HashMap<>();

数值文字的加强

我不敢肯定这个对大多数人都有用。你可以这样做:

int billion = 1_000_000_000;

允许在 switch中使用字符串

这个无需解释,其意思很明确。

String availability = "available";

  switch(availability)

  {

  case "available":

  //code

  break;

  case "unavailable":

  //code

  break;

  case "merged":

  //code

  default:

  //code

  break;

  }

二进制文字

你可以使用前缀0b创建二进制文字

int binary = 0b1001_1001;

以上这些就 是Java1.7的代码实例。如果有人能给我指出还有哪些没有包含进去,那就更好了。我敢肯定,已经有其他的开发人员对此进行了关注。

Java 1.7的性能表现

Java 7的性能有多大的提升?这里我们来针对Java 7做一个测试,内容如下。在一台装有ArchLinux系统的Macbook Pro电脑上(因特尔Duo CPU T7700,主频2.40GHz,有两年的使用时间)运行了这些测试。内存是2Gb的,把Heap Size设置成了728m(-Xms728m -Xmx728m)。

◆测试1 为一个List添加100万个字符串值(String字符串是一个UUID,是用UUID.randomUUID()产生的)。

◆测试 2 带有100万键、值对的HashMap。每个键、值对通过并行线程进行计算。键是一个UUID,值int是用Math.random()产生的。

◆测试3 把100万个ArrayList条目打印到一定数量的文件(1000个)中。把条目写进恰巧并行的不同文件中。

我只比较了 Java1.6 (1.6.0_19) 和 Java 1.7 (b87)。后来根据评论的要求,我把Java1.5也添加了进来,但是并没有添加Java1.4,因为它的时间太久远了。


以下是另外一篇文章的介绍,感觉都挺好,就留下来了


1,switch中可以使用字串 

Java代码:

String s = "test";   

switch (s) {   

  case "test" :   

     System.out.println("test");  

  case "test1" :   

    System.out.println("test1"); 

    break ;   

  default :   

    System.out.println("break"); 

    break ;   

 }  

 

 

2,"<>"这个玩意儿的运用List<String> tempList = new ArrayList<>(); 即泛型实例化类型自动推断。

 

 

3. 语法上支持集合,而不一定是数组 

Java代码:

final List<Integer> piDigits = [ 1,2,3,4,5,8 ]; 

 

 

4. 新增一些取环境信息的工具方法 

Java代码:

File System.getJavaIoTempDir() // IO临时文件夹 

File System.getJavaHomeDir() // JRE的安装目录 

File System.getUserHomeDir() // 当前用户目录 

File System.getUserDir() // 启动java进程时所在的目录 

....... 

 

 

5. Boolean类型反转,空指针安全,参与位运算 

Java代码:

Boolean Booleans.negate(Boolean booleanObj) 

True => False , False => True, Null => Null 

boolean Booleans.and(boolean[] array) 

boolean Booleans.or(boolean[] array) 

boolean Booleans.xor(boolean[] array) 

boolean Booleans.and(Boolean[] array) 

boolean Booleans.or(Boolean[] array) 

boolean Booleans.xor(Boolean[] array) 

 

 

6. 两个char间的equals 

Java代码:

boolean Character.equalsIgnoreCase(char ch1, char ch2) 

 

 

7,安全的加减乘除 

Java代码:

int Math.safeToInt(long value)

int Math.safeNegate(int value)

long Math.safeSubtract(long value1, int value2)

long Math.safeSubtract(long value1, long value2)

int Math.safeMultiply(int value1, int value2)

long Math.safeMultiply(long value1, int value2)

long Math.safeMultiply(long value1, long value2)

long Math.safeNegate(long value)

int Math.safeAdd(int value1, int value2)

long Math.safeAdd(long value1, int value2)

long Math.safeAdd(long value1, long value2)

int Math.safeSubtract(int value1, int value2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

首先是模块化特性:现在的 Java7也是采用了模块的划分方式来提速,一些不是必须的模块并没有下载和安装,因此在使用全新的Java7的虚拟机的时候会发现真的很快,当虚拟机需要用到某些功能的时候,再下载和启用相应的模块,这样使得最初需要下载的虚拟机大小得到了有效的控制。同时对启动速度也有了很大的改善。如果你对 OpenJDK的架构比较熟悉,你甚至可以定制JDK的模块。

 

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

 

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

 

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值