Java 语言的发展历程

6 篇文章 1 订阅

Java 是目前最流行的语言之一,Java 的应用相当广泛,Java是最流行的基于虚拟机的编程语言……

这么火的Java,经历的怎么样的发展历程才走到今天的呢?

Java 0

Java的原型是1991年的Oak。Oak语言一开始是设计用来给电视编程的,不过Oak太先进了导致电视跑不动Oak代码。后来Oak项目更名Java,也被设计成了一个C语言风格的语言方便程序员切换平台(毕竟长得像用得顺手)。Java语言就这么“碰巧”设计出来了。

JDK 1.0

1995年太阳微系统公司(Sun Microsystems)发布了Java 1.0。宣传口号是:“一次编码到处运行”。

JDK 1.1

1997年JDK 1.1发布。新增了反射API。随之而来的是JavaBeans。AWT(抽象窗口工具包)也迎来了更新,事件系统获得了大规模重写。

J2SE 1.2

1998年J2SE 1.2发布。Java 1.2新增了集合框架(java.util.*),以淘汰Java 1.0的一些旧的集合类。新的JVM(JDK 1.0的JVM现在被称作Classic VM,新的JVM称为Exact VM,支持了JIT编译器加快运行速度)。同时新增了Swing API,使得Java编写桌面客户端的能力大幅提升(现在也有很多使用Swing的程序)。

J2SE 1.3

2000年Java 1.3发布。虚拟机重大更新,Sun收购公司得到的更优秀的Hotspot虚拟机被设为Java的默认虚拟机。JVM的效率获得大幅提升。

J2SE 1.4

2002年Java 1.4发布(貌似现在很多项目还是基于Java 1.4和1.5)。
支持了正则表达式、NIO(新的IO库更加注重性能,同时API也更好用,后来Java库代码重写将很多基于旧IO的代码更新成NIO加快Java IO的速度)、日志API(轻量级,但不支持获取线程名,不如log4j好用),集成了XML解析器。

// regex
Pattern pattern = Pattern.compile("...");
Matcher matcher = pattern.matcher(a string);
if (matcher.match()) {
    ...
}

J2SE 1.5

2004年Java 1.5发布。这个版本是对语言特性的重大更新。支持了泛型(Generics),auto boxing and unboxing(也就是基本类型和对应的类间的隐式转型),枚举类型(Java的枚举类型十分强大),for each语法(而不再需要Iterable等依赖传统的for循环遍历集合,代码变得更简洁也更不易出错),可变长参数(千呼万唤始出来),并发库(包含了好几个支持并发的集合,代码十分优美精炼,毕竟是牛人写的代码)等。

enum Images implements Resource<Image> { // Generics
    LOGO("/assets/logo.png"),
    ...;
    static int id = 0;
    static Map<String, Integer> map = new HashMap();
    private Images(String location) {
        map.put(location, ++ id); // auto-boxing
        ...
    }

    public static void doSomething() {
        for (String location : map.keys()) { // for each
            ...
        }
    }
}

Java SE 6

2006年Java 1.6发布。Java 6注重于提升性能并支持一些新的库。

Java SE 7

2011年Java 1.7发布。原定的Java 7是一个大更新,支持lambda表达式,coin项目,jigsaw模块化等大更新。而这几个功能在当初是十分适应时代发展的。但Sun被收购的一段时间内Java的开发进程被拖慢,许多功能被推迟到Java 8(其中部分功能包括jigsaw和coin被推迟到Java 9)。
时隔5年才发布的Java 7支持了invokedynamic指令方便动态语言使用(后来被Java 8用来支持lambda表达式),switch支持字符串的枚举,Diamond操作符(泛型参数由编译器自动推导),multi-catch(一次性捕获多种异常进行同一种异常处理)。

try {
    ArrayList<Integer> list = new ArrayList<>(); // Diamond operator
    // Invoke some method with exceptions
} catch (IOException | SAXException e) { // multi-catch
    // TODO
}

Java SE 8

2014年Java 1.8发布。一次革命性的更新:支持了lambda表达式。这将极大地改变Java代码的方式。新的日期和时间API,自带JavaFX。JVM中用metaspace代替了permanent generation。

比如我们可以这么写了:

List<Integer> transactionsIds = transactions
    .parallelStream()
    .filter(t -> t.getType() == Transaction.GROCERY)
    .sorted(comparing(Transaction::getValue).reversed())
    .map(Transaction::getId)
    .collect(toList());

Java SE 9

2017年Java 1.9发布。又是一次真·革命性更新(把一大堆项目给搞坏了【真革命系列】,向下兼容性极差【这些项目都使用了非公共API的Sun内部API,也就是有风险未来可能被移除,但这是不得不使用的】)。还有一些其他的东西。G1GC成为了默认的垃圾回收器。

比如一个module-info.java

module com.company.someapp {
    exports com.company.api;
    requires java.base;
}

小结

Java 经过了20多年的发展,正处于不断地更新与完善的过程中,看着一个语言的发展就如同看一个小孩的成长一样,希望语言越变越好。这可能也是Java能成为最流行语言之一的原因吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值