十年前,几乎没有人想到,几个技术人员研发的一个“小语言”,会发展成如今的一个“生态圈”,这就是Java。
Java让互联网动了起来
“计算机语言的发展历史也是人们不断追求更高的模块化、抽象化和封装化的历史。近十年期间,很多编程语言,从出现到没落经过了一波又一波。像1970年代出现的Pascal,如今用的人已经不多了。”一位资深程序员告诉记者,“‘算法+数据结构=程序’几乎成为软件开发的惟一准则,结构化程序设计方法从计算机发展角度来看是自然而然的,但今天从抽象的角度来看,这种方法几乎可以说是一个‘时代错误’。实际上,软件开发的主要目的就是描述和反映现实世界,结构化程序设计方法并不符合这个思维方式。”
因此,抽象的过程应该是以现实世界的对象为中心的,于是面向对象的抽象方法就走到了前台,出现了Visual Basic、Delphi、C++以及Java等面向对象的编程语言,而互联网的勃兴,则给Java的成长带来了肥沃的土壤。
“Java诞生时并没有引起太多人的注意,它第一次让人们觉得惊艳是在一次网站演示上,但当时人们对Java还抱有很大的争议。”被誉为“Java之父”的SUN公司副总裁、软件部首席技术官James Gosling回忆起十几年前的情景不无感慨地说,“但Java的出现为当时的互联网增添了生机,它让那些静态的页面动了起来。”
而且,因为Java具有“只写一次,随处运行”的特点,从而引起了更多开发者的兴趣。
“我们可以不必再做重复性质的劳动了。”中国科学院软件研究所宋靖宇博士说,“此前,为了能够使程序在不同型号的硬件平台上运行,开发人员必须耗费大量的时间来一遍又一遍的编写代码,然而Java改变了这样的局面,只写一次就可以。”
由于看到Java在互联网时代的巨大作用,清华大学计算机系教授王克宏从1995年就开始跟踪Java的发展。
Java语言的优势似乎是与生俱来的,然而,仅有语言是不够的。
免费的Java创造了应用奇迹
“为了提高软件开发效率,任何编程语言都离不开相应的开发工具和程序库。”王克宏说。于是,SUN公司在1996年的1月23 日发布了JDK1.0,其中包括两个部分:运行环境和开发工具,运行环境包括五大部分:核心API、集成API、用户界面API、发布技术和Java虚拟机。
随着各种功能的完善与提炼,各种Java开发工具以及开发环境的丰富,Java不再是一种语言的代名词,它变成了一种开发平台。人们常常听到的J2EE(企业版)、J2ME(微型版)、J2SE(标准版)就是Java的三大核心平台。利用这三种不同的平台,人们可以来做不同行业的应用。
SUN公司大中华区总裁余宏德说:“Java经过十年的发展,已经得到了全球的公认,可以说,当今的电子时代是‘Java无处不在’,正是基于它一开始的技术公开性,Java已经变成全球最富有活力的技术社区之一。”
尽管,Java目前已经风靡全世界,但Java 到底给整个产业带来什么,除了Java程序员外,似乎没有人能具体感觉到。
SUN中国区市场经理马君海比喻说:“电灯的发明,使得有了现在庞大的电力产业;电话的发明,使得有了当今兴旺的电信产业;而Java的发明,则给软件产业带来了前所未有的改变。”
像一切新兴事物一样,Java的发展并不那么顺利,其坎坷起步的经历,可以从SUN首席执行官Scott McNealy在SUN的Java One大会上的一句话得知一二:“七八年前的Java One演说现在听起来真是寒碜,我们那时实在是太小看它了,我们根本不知道这项技术将会改变什么。”而且,由于开始就是基于开源的态度,当时很多人怀疑它是否能赚钱。
然而,今天的Java已经得到广泛应用。
据全球市场调查分析显示:已经有25亿部电子设备采用了Java技术,Java智能卡发行量已经达到10亿张,采用Java技术的手机达7亿多部,7亿台PC中应用了Java技术,140家电信运营商支持Java 技术,全球有超过450 万个Java开发人员,JCP(Java社区项目)已经有912家会员企业。
如果没有Java,SUN将会怎样
从1997年4月6日美国旧金山的第二届Java One大会,到今年的Java十周年盛事,本报目睹了Java 十年的风风雨雨,眼瞅着这个以“咖啡”命名的小小编程语言变成了一个平台,一个社团,一个生态系统。Java不仅发展了自己,也同时改变了它的缔造者。Java对SUN的改变是间接的、渐进式的,有时候甚至不为外人所道也。
与平台无关的Java旨在与“锁定用户的”Windows相抗衡,给人们更多的选择,但推动Java研发的却是家硬件公司――硬件公司与微软抗个什么衡?也许有人会拿IBM做类比――IBM也大量涉足软件。问题在于,IBM涉足软件的结果是把自己变成了一个软件和服务公司,而SUN的主业依然是服务器。表面上看,“纯软”的Java并没有给“偏硬”的SUN带来直接效益,反而树了个强大的敌人,这就是并不“软”的微软。
同时,尽管SUN对Java的投资巨大,却从没说过它从Java中获得过多少回报。因为使用Java程序和开发工具包是免费的,这让那些利用Java做第三方开发的ISV们赚了个钵满盆满,可是SUN得到了什么?当然,Java作为高级编程语言,它的注册和维护也能给SUN带来一定收入,但这是一个小头,有人比喻说:“SUN成了Java的管家,而不是主人。”
SUN大中华区市场总监李永起近日为记者揭开了Java与SUN的秘密:“如果SUN只是一个做服务器的公司,人们就不会对我们太感兴趣,但有了Java,就大不一样了,人们会跑过来与我们讨论Java,人们会说:‘哦,能研发出Java这么棒的编程语言的公司一定不同凡响!’况且,服务器的销售从来就不是孤立的,它体现为一个系统,Java在硬件销售中发挥了关键用。”SUN用 Java来定位Web服务,发挥其多平台对话的特长,营造Web服务环境。
Internet让Java复活,Java则拯救了曾经陷入“偏硬”困境中的SUN。
SUN董事长麦克尼里认为:Java带来的益处从根本上讲是间接的。“但是,”他说,“想像一下,如果10年前SUN没有做Java,今天SUN将会在哪里?如果人们不写Java Web服务,他们会写.Net的程序,如果他们写.Net的程序,他们就不会为SUN的设备写程序。”
.NET不折不扣的对手
近年来,国内一批软件公司都采用Java技术开发了一批软件平台和产品,这两年Java在国内得到了迅速发展。不过,尽管看起来Java的队伍似乎很强大,但国内Java人才相对而言还是少得可怜。
“SUN在新加坡建立了Java高级培训中心,目前新加坡有5万名Java 人才,而新加坡全国只有380万人,即全国1.3%的是Java人才,如果按此比例,中国应有1700万名Java人才,而现在估计仅10到15万人。”王克宏教授在相关的报告中写道,“造成国内Java应用不多的原因是多方面的。”
“这两年SUN才开始在中国举办各种活动,而许多媒体对Java的不关注也是其中一个原因。”王克宏说。
“其实,鉴于Java出来时总给人阳春白雪的面孔,使得国内的许多编程者在熟悉了微软的开发平台后,很难转换过来是其中的一大部分原因。”宋靖宇博士说,“你不得不承认微软在开发工具上的人性化以及可视化设计是高超的。”
“在讨论 Java 的时候我们很容易将 Java 语言和 Java 平台混为一谈,与.NET 平台比较的过程中,也更多的是将Java平台和C#比较,或者将Java语言和.NET 平台做比较,在我个人的意识中,这是不够公正的。”上海大学博士刘锬对记者说,“Java既是一种语言,也是一种平台。”
说到微软的.NET,它从提出的开始就是立足平台,相对于 Java 提倡的“一次编写,到处运行”,.NET则提倡“一个平台,多种语言”,因为平台的统一性,因此在各个程序语言的兼容性和混合开发方面做得比Java 好,也因此有些微软的“粉丝”嘲笑Java是“一次编写,到处调试”。
“微软的C#是集合了C以及C++甚至Java的许多优点的结晶,在Windows平台上,似乎C#在运行速度上更胜一筹。”刘锬介绍说,“在任何一个平台上,我们直接交流的是实现Java语言运行的虚拟机,我们希望Java在虚拟机以及它的开发平台的研发上变得更易用、更人性化。”
“有对手总是一件不算坏的事情,这个世界不需要‘独孤求败’,商业规则也不允许‘独孤求败’的出现,因为那样会打破竞争格局的平衡,而Java和.NET这两个平台的纷争才刚刚开始。较量,有利于整个软件世界。SUN公司在商业模式的运作上甚至可以跟微软学习。”
分享到:
相关推荐
Java字节码是Java程序在运行时被JVM(Java虚拟机)解释执行的一种中间语言。每个Java类都由一个`.class`文件表示,其中包含了编译后的字节码指令。`.class`文件的结构非常严谨,它不仅包含了类的信息,如类名、方法...
在这个例子中,`basename` 属性指定了Resource Bundle的基础名,`key` 属性对应资源包中的键,`var` 属性将获取到的值赋给一个变量。 在服务器端,你可以通过HttpSession来保存和改变用户的Locale,如下所示: ```...
下面将详细介绍每一种模式的定义、适用场景、参与者和类图,以及它们在Java编程中的具体应用。 创建型模式主要包括: 1. 工厂方法模式(Factory Method):定义了一个创建对象的接口,但由子类决定要实例化的类是哪...
转载请注明出处,此系列的例子都是本人想了很久认为适合教学容易理解的,若有更好的例子也请发邮件给我一起研究,nj.lg#163.com Observer (观察者模式) 又叫做发布/订阅(Publish/Subscribe)模式。 当一个对象的...
3. **更新Ticker文本**:如果需要改变Ticker显示的信息,可以随时调用setTicker方法,传入新的字符串。 4. **添加到Form或Display**:最后,将TextBox添加到Form,并显示出来。在J2ME中,通常会将组件放入Form,再...
身份证照片自动识别java源码 第零章 说明 golangman中golang表示语言,man表示linux ...个人喜好,因为我很喜欢WebStorm开发js,所以安装了WebStorm的go插件,个人可自行改变,但根据我试用多个IDE或代码编辑器
工具方面,可能涉及到数据库连接池(如C3P0或HikariCP)、SQL查询以及数据转换工具,如Java的`PreparedStatement`用于执行SQL语句,`ResultSet`用于获取查询结果,然后将其转化为`JTable`可识别的格式。 总结来说,...
首先,你需要将Reachability.h和Reachability.m文件添加到你的Xcode项目中。这两个文件包含了实现网络可达性检测的所有代码。 **2. 初始化Reachability对象** 在你的类中,创建一个Reachability的实例,通常在...
在给定的标题“jsp页面内容滚动(转载)”和描述中,我们可以推断出这个话题主要关注如何在JSP(Java Server Pages)页面上创建动态滚动的内容。本文将深入讲解如何利用HTML、JavaScript以及可能涉及的CSS来实现这一...
例如,在Java中,`java.util.regex`包提供了`Pattern`和`Matcher`类来实现正则表达式的操作。 通过阅读"正则表达式30分钟入门教程.html"和".mht"文件,你可以进一步了解这些概念的实际应用,以及如何在不同场景下...
5. **编程实现**:对于开发者来说,可以通过编程语言(如C#、Java、Python等)来实现自定义鼠标指针的功能。例如,在Windows平台上,可以使用WinAPI函数`LoadCursor`或`CreateCursor`来加载和创建自定义的鼠标指针。...
下面将详细介绍这个自定义`select`的实现方法及其相关知识点。 首先,`<select>`标签是HTML中用于创建下拉列表的基本元素。它包含了多个`<option>`标签,每个`<option>`代表用户可以选择的一个选项。例如: ```...
例如,将一个按钮从屏幕左侧移动到右侧,可以通过以下XML代码实现: ```xml android:fromXDelta="0%" android:toXDelta="100%" android:duration="1000" /> ``` 2. 旋转动画(Rotate Animation) 旋转动画用于...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...
- 采用了Arquillian测试平台,这是一种集成测试框架,可以更快地进行改变、编译和测试的周期。 二、部署配置 Jboss7的部署配置包括以下几个重要方面: 1. 目录结构:熟悉Jboss7的目录结构对于理解如何组织和部署...
下面将详细讨论这些知识点。 1. **Android应用程序开发**:Android是Google开发的开源移动操作系统,支持各种应用程序的开发。开发者使用Java或Kotlin语言编写代码,并借助Android Studio集成开发环境进行编译、...
下面我们将深入探讨如何在Android平台上实现这个效果,因为提供的文件列表中包含了"MainActivity.java",这通常是Android应用的主要活动类。 首先,我们需要了解Android的图形渲染机制。在Android中,我们可以使用...
3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何避免再三地重复 DAO 代码。 在这里我建议项目最好使用一个共通的DAO,因为这样会为你省去非常多的类,而那些类里的...
3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何避免再三地重复 DAO 代码。 在这里我建议项目最好使用一个共通的DAO,因为这样会为你省去非常多的类,而那些类里的...