Java0
1996 年 1 月Sun公司发布第一个正式的Java版本,JDK1.0
Java1
1997 年 2 月Sun 公司发布 JDK1.1
- 重新编写了用于桌面软件开发的 AWT 库(因为上个版本的 AWT 是 Java 最弱的组件,之前的库对于不同操作系统的界面抽象太简单,各个平台并不能兼容,这也不符合 Java 承诺的 “write once,run anywhere”)
- 加入了内部类
- 支持 JavaBeans ,使得 Java 对象可以被序列化成二进制
- JDBC,让 Java 可以连数据库,不过还需要数据库开发自家的数据库驱动才可以。
- RMI 远程方法调用,本地代码调用不在本地的方法,但需要遵守相关的通信协议。
- 支持不能在代码运行时修改的反射
- Symantec 公司为 Java 开发编写的即时编译器(提前编译代码,增强代码真正执行时的性能)
- 支持国际化和Unicode编码
Java2
1998 年 12 月公司发布 J2SE1.2
1999年,Sun 公司发布了三个版本的 Java,标准版(J2SE,后来改名为 JavaSE)、企业版(J2EE,后来改名为 JavaEE)、微型版(J2ME,后来改名为 JavaME)
- strictfp 关键字,可以保证在不同平台上的浮点数计算都是一样的
- Swing 组件,可以看作是 AWT 增强版的桌面软件开发库
- Sun 公司自己开发的即时编译器
- Java plug-in,Java 相关的插件,如支持 Applet 程序的浏览器插件
- Java IDL,为 Java 和其他语言互通打下基础
- Collections 框架,Java 中复杂的数据类型
Java3
2000 年 5 月Sun 公司发布 J2SE1.3
- Sun 公开的 HotSpot JVM,经典的 Java 虚拟机
- 为遵循 CORVA 标准而修改了 RMI
- **Java Platform Debugger Architecture,**用于 Java 调式的平台
- JavaSound API,编写音频处理的函数库
- Synthetic proxy,Java 代理的基础
Java4
2002 年 2 月Sun 公司发布了在 JCP(Java Community Process) 的标准下开发的J2SE1.4
- 支持正则表达式
- assert 关键字,写测试代码用
- 异常链,低级异常包装后再抛出,也方便开发人员调试
- 支持网络 IPV6 标准
- NIO,非阻塞的 IO,优化 Java 的 IO 读取
- 日志 API
- XML 解析器和 XSLT 转换器
- 集成安全和加密扩展组件(JCE, JSSE, JAAS)
- Java Web Start 技术,直接从浏览器中启动 Java 平台
- Preference API,在 java.util.prefs 包下
Java5
2004 年 9 月Sun 公司发布 J2SE5
- 泛型 (Generics)
List<Integer> list=new ArrayList<Integer>();
- 增强for循环(Enhanced for Loop)
int[] array = {
1, 2, 3, 4, 5};
for (int i : array) {
System.out.println(i);
}
- 自动封箱拆箱(Autoboxing/Unboxing )。八大基本类型和它们的包装类能够自动的相互转换。
- 枚举(Typesafe Enums)。枚举是一种实现线程安全的单例模式的好方式。
enum TestEnum{
one,
two;
TestEnum() {
}
}
- 可变参数 (Varargs)。可变参数本质仍然是用一个数组存储参数,只是java隐藏了这一过程。需要注意的是如果一个方法声明中含有可变参数,那必须放在最后一个位置。
//可变参数测试
public static void testVarargs(String... args) {
//本质就是个数组
System.out.println(args[1]);
for (String arg : args) {
System.out.println(arg);
}
}
- 静态导入(Static Import)。通过import类来使用类里的静态变量或方法(直接通过名字,不需要加上类名.),简化了代码的书写。
//单个导入
import static java.lang.Math.PI;
//批量导入
import static java.lang.Math.*;
- 注解(Annotations)
//注释注解的注解又叫做元注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotations {
//注解内可以添加方法,也可以不添加
//注解方法的返回值只能是基本类型,String,Class类,枚举,注解,可以有默认值。
int id();
String name() default "whh";
Class classType();
TestEnum enumType();
}
- 改进了 Java 的内存模型,提供了 java.util.concurrent 并发包。
- Metadata,元数据,描述数据的数据
Java6
2006 年 12 月Sun 公司发布 JavaSE6
- 集合框架增强,下面为新添加的接口和类
Deque
BlockingDeque
NavigableSet
NavigableMap
ConcurrentNavigableMap
ArrayDeque
ConcurrentSkipListSet
ConcurrentSkipListMap
ConcurrentSkipListMap
AbstractMap.SimpleEntry
AbstractMap.SimpleImmutableEntry - Scripting. 可以让其他语言在java平台上运行。 java6包含了一个基于Mozilla Rhino实现的javascript脚本引擎
- 支持JDBC4.0规范
- 提供动态语言支持
- 提供编译 API,即 Java 程序可以调用 Java 编译器的 API
- Swing 库的一些改进
- JVM 的优化
- 微型 HTTP 服务器 API
Java7
2011 年 7 月,Oracle收购Sun 公司,发布 JavaSE7
- 二进制前缀0b或者0B。整型(byte, short, int, long)可以直接用二进制表示。