前言:资料来自网络,楼主只是整合了解新技术,有可能还不够全面但是基础中大多能用到。

一、JAVA1.5中的新技术


1.泛型(Generic)


C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。

List<String> c = new ArrayList<String>();




2.For-Each循环


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


for (MyObject myObject :c){ 
	myObject.method(); 
}



3.自动装包/拆包(Autoboxing/unboxing)


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


int i = 1;
Integer integer = i;
int j = integer;




4.枚举(Enums)


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


enum Color{
	Red,Yellow,Blue;
}
Color myColor = Color.Red;



5.可变参数(Varargs)


可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。


public void method(Object... objs) {
	for (Object obj : objs)
		System.out.println(obj);
}



6.可变的返回类型


在JDK5.0以前,当覆盖父类方法时,返回类型是不能改变的。现在有新的规则用于覆盖方法。如下,一个典型的例子就是clone()方法:


class Employee{
	public Employee clone() { ... }

    ...
}

Employee cloned = e.clone();



7.静态导入


import static java.lang.Math;
import static java.lang.System;

out.println(sqrt(PI));



8.控制台输入


JDK 5.0先前的版本没有Scanner类,只能使用JOptionPane.showInputDialog类代替。


Scanner in = new Scanner(System.in);
int n = in.nextInt();
double x = in.nextDouble();
String s = in.nextLine();



9.格式化输出


JDK5.0以前的版本没有printf方法,只能使用NumberFormat.getNumberInstance来代替。


System.out.printf("%8.2f", x);



10.内容面板代理


在JDK5.0先前的版本中,JFrame,JDialog,JApplet等类没有代理add和setLayout方法。


add(component);
setLayout(manager);




二、JAVA1.6中的新技术



1.SystemTray类


在JDK6中 ,AWT新增加了两个类:Desktop和SystemTray,前者可以用来打开系统默认浏览器浏览指定的URL,打开系统默认邮件客户端给指定的邮箱发邮件,用默认应用程序打开或编辑文件(比如,用记事本打开以txt为后缀名的文件),用系统默认的打印机打印文档;后者可以用来在系统托盘区创建一个托盘程序.



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


JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。



3.新增StAX


StAX(The Streaming API for XML)是JDK6.0中除了DOM和SAX之外的又一种处理XML文档的API



4.新增Compiler API


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



5.轻量级Http Server


JDK6提供了一个简单的Http Server API,,程序员必须自己实现HttpHandler接口,HttpServer会调用HttpHandler实现类的回调方法来处理客户端请求。



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


插入式注解处理API提供一套标准API来处理Annotations,它把method, package, constructor, type, variable, enum, annotation等Java语言元素映射为Types和Elements, 从而将Java语言的语义映射成为对象。



7.用Console开发控制台程序


JDK6中提供了java.io.Console类专用来访问基于字符的控制台设备.



8.Web服务元数据(Web Services metadata)



9.更简单,更强大的JAX-WS


Java Architecture for XML Web Services的缩写,是一种用Java和XML开发Web Services应用程序的框架。



10.脚本语言支持(Scripting)


JDK6增加了对脚本语言的支持,原理上是将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等,另外,由于现在是编译成bytecode后再执行,所以比原来边解释边执行效率要高很多。



11.JTable的排序和过滤

原来的JTable基本上是只能显示数据,在JDK6新增了对JTable的排序和过滤功能。




三、JAVA1.7中的新技术


1.对集合的支持


创建List / Set / Map 时写法更简单了。


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



2.对资源的自动回收管理


String path = "d:\\";
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
	return br.readLine();
}




3.泛型实例创建过程中类型引用的简化


Map hello = new Map<>();




4.在数字中使用下划线


int billion = 1_000_000_000;




5.对字符串进行switch case


注意:在把字符串传进Switch case之前,别忘了检查字符串是否为Null。


String availability = "available";
switch(availability) {
	case "available":
		break;
    case "unavailable":
    	break;
    case "merged":
    	break;
    default:
    break;
}




6.二进制符号


你可用作二进制字符前加上 0b 来创建一个二进制类型。


int binary = 0b1001_1001;




7.一个catch里捕捉多个异常类型


try {
	//Here comes your code....
}catch(IOException e1 | NullPointerException e2 | MyException me) {
	
}



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

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



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


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


11.两个char间的equals


12.安全的加减乘除



三、JAVA8中的项目


Java 8包含两个主要项目: 

1. Lambda 


在Lambda项目中,多核处理器下的Java编程将更高效,Lambda表达式可以帮助开发人员提高效率,更好地利用多核处理器。Lambda项目还包括一个新的处理系统,该系统允许要求代码建模的编程模式作为数据。新功能一览: 

Lambda表达式的运用

扩展目标类型化

方法和构造函数参考

默认方法

2. Jigsaw 


Jigsaw项目的目标是创建一个实用的方式来在JDK上设计和实施一个模块系统,然后将该系统应用于JDK本身。其关键是令大块的代码更易于管理,并促进应用和大型运算的代码重用。Jigsaw项目还带来了许多新的表单功能,涉及封装、重构、版本和模块集成。 


此外,除了这两个项目,Java 8 还增加改进了一些其他语言功能,如升级核心Java库使并行运算的表达更容易;虚拟扩展方法允许对接口增加方法,为默认实现指定参考;增加新的日期/时间API,同时支持传感器,增加代码的部署选项。 


四、JAVA9-10发展规划


甲骨文对Java 8 的前景很是看好,并已经开始讨论Java 9发展的关键领域。比如加入一个self-tuning JVM,提高本地集成和大规模多核的可扩展性;通过新的元对象协议和资源管理器为云应用添加跨语言支持。 
甲骨文也表示,Java9和10将加入大数据、多语言的互操作性、云计算和移动,预期分别于2015年和2017年发布。而关于Java开发工具包(JDK)10以及之后的版本也正在讨论中,比如使Java语言面向对象,形成一个统一的类型系统,所有原语都将转换为对象和方法。 
随着使用人数的增加,Java正逐渐成为最常用的编程语言,令每个使用者都满意成了它的目标。甲骨文认为Java在将来会成为开发者们首选的编程语言,因为它可以实现的东西正好符合了开发者们的期望。