1.外部环境
我们知道,任何事件的发生都离不开外部环境变化,Java语言的诞生也不例外,我们先看看Java诞生时的外部条件是怎样的。
市场环境:20 世纪 90 年代,单片式计算机系统诞生,单片式计算机系统不仅廉价,而且功能强大,使用它可以大幅度提升消费性电子产品的智能化程度。有目标明确的巨大市场。
技术环境:当时 C++较为有优势的,项目小组首先考虑的是采用它来编写程序,但 C++过于复杂和庞大,再加上由于消费电子产品所采用的嵌入式处
理器芯片的种类繁杂,需要让编写的程序跨平台运行,假如用 C++编写的话对程序的跨平台运行不友好。当时的技术不足以支持,或者说不能很好的支持要发展的市场环境。
公司环境:1982年2月24日,安迪和维诺德·科斯拉(Vinod Khosla)、斯科特·麦克尼利(Scott McNearly)创建了Sun公司。Sun公司成立以后,因为Sun-1实在是太先进了,一开张就卖得特别好,所以第一季度就盈利了。到1983年的时候,Sun公司就已经非常有名气了。1986年,成立仅仅四年的Sun公司上市了。作为一个持续增长超过30%的公司,Sun一上市就受到了极大的追捧。Sun公司在2001年的时候,营收达到了183亿美元的巅峰。公司处于上升期,有资源支持新项目、新想法的落地。
人才环境:1990年,Sun的总裁麦克尼利(McNealy)让高斯林自己组建一个完全独立于公司的小组,由小组成员自己决定工作目标和进度。麦克尼利对高斯林说:“我不管你们要做什么,要多少钱、多少人,也不管你们花多长时间做出来,公司都无条件支持”。这个后来取名为“绿色小组”的团队成立之初只有4个人。他们有一个很模糊的想法,甚至连最终的目标产品是硬件还是软件也不知道。但是他们知道必须发明一些技术或者产品让Sun公司赶上信息领域的下一波大浪潮。当时人类已经发明了很多种消费类电子产品,包括微机、手机、手持电脑、录相机、电视机、洗衣机、冰箱、微波炉等等。他们认为要将这些设备数字化并用网络互联讲是今后的方向。
2.从0到0.5
开发团队决定既不用 C++编写,也不开发全新的编程语言,而是对 C++进行改造:去除了C++复杂的指针和内存管理,并结合嵌入式系统的实时性要求。所以最开始,Java也叫C++--。最开始命名为Oak,后来因为版权原因改为Java。
当他们在向硬件生产商进行演示的时候,硬件生产商对此并不感冒,OaK 语言因为缺乏硬件的支持而无法进入市场,从而被搁置一旁。
Java的开发从这时候来看,是失败的,虽然语言已经初步成型,但瞄准的目的市场并没有给出正反馈。
3.从0.5到1
1994 年,项目小组看到了浏览器在未来的发展前景,于是决定将 OaK 应用于万维网。1995 年,他们用 OaK 语言研发了一种能将小程序嵌入到网页中执行的技术——Applet,由于 Applet 不仅能嵌入网页,还可随同网页在网络上进行传输,这让无数的程序员看到了 OaK 这门语言,与此时,OaK正式更名为 Java。从此,Java 在互联网的推动下火了。
1996 年 1 月,SUN 公司推出了 JDK1.0。在 JDK1.0 发布后,有很多程序员学习并运用 Java 来制作网页,JDK 包括两大部分:开发工具和运行环境。运行环境包括核心 API、集成 API、用户界面API、发布技术、Java 虚拟机(JVM)。JDK1.0 的发布,标志着 Java 成为一种独立的开发工具。在同年 9 月,约有 8.3 万个网页应用了 Java 技术来制作。
JDK1.0 的代表性技术有:Java 虚拟机、Applet、AWT 等。
3.1 Java虚拟机
Java虚拟机(英语:Java Virtual Machine,缩写为JVM),一种能够执行Java bytecode的虚拟机,以堆栈结构机器来进行实做。最早由Sun微系统所研发并实现第一个实现版本,是Java平台的一部分,能够执行以Java语言写作的软件程序。这里不赘述,后面会详细介绍。
3.2 Java Applet 和 Java AWT
Applet(Applet是由英语“应用程序”Application的缩写App和代表“小”的后缀let组成)
AWT 抽象视窗工具组(Abstract Window Toolkit=AWT)是Java的平台独立的视窗系统, 图形和使用者界面器件工具包。
- 以AWT方式撰写一个显示“Hello, world!”的Java applet。
import java.applet.Applet; import java.awt.*; // Applet code for the "Hello, world!" example. // This should be saved in a file named as "HelloWorld.java". public class HelloWorld extends Applet { // This method is mandatory, but can be empty (i.e., have no actual code). public void init() { } // This method is mandatory, but can be empty.(i.e.,have no actual code). public void stop() { } // Print a message on the screen (x=20, y=10). public void paint(Graphics g) { g.drawString("Hello, world!", 20,10); // Draws a circle on the screen (x=40, y=30). g.drawArc(40,30,20,20,0,360); } }
applet没落
applet在java9中已经被标记过时,简而言之,这是因为许多主流浏览器已经删除或计划删除基于标准的插件支持,因此Oracle希望Java开发人员从Java小程序迁移到无插件的Java Web-start技术。
甲骨文发表了一篇名为“从Java小程序迁移到无插件Java技术”的论文,它详细解释了为什么小程序被弃用以及开发人员应该使用的替代方法。
AWT没落
AWT作为Java最弱的组件受到不小的批评。最根本的缺点是AWT在原生的用户界面之上仅提供了一个非常薄的抽象层。例如,生成一个AWT的复选框会导致AWT直接调用下层原生例程来生成一个复选框。不幸的是,一个Windows平台上的复选框同MacOS平台或者各种UNIX风格平台上的复选框并不是那么相同。
这种糟糕的设计选择使得那些拥护Java“一次编写,到处运行(write once, run everywhere)”信条的程序员们过得并不舒畅,因为AWT并不能保证他们的应用在各种平台上表现得有多相似。一个AWT应用可能在Windows上表现很好可是到了Macintosh上几乎不能使用,或者正好相反。在90年代,程序员中流传着一个笑话:Java的真正信条是“一次编写,到处测试(write once, test everywhere)”。导致这种糟糕局面的一个可能原因据说是AWT从概念产生到完成实现只用了一个月。
在第二版的Java开发包中,AWT的器件很大程度上被Swing工具包替代。Swing通过自己绘制器件而避免了AWT的种种弊端:Swing调用本地图形子系统中的底层例程,而不是依赖操作系统的高层用户界面模块。