Java的诞生_whyyoualwayssilly的博客-程序员宅基地

技术标签: java  Java故事汇  

        Java是由James Gosling、Patrick Naughton、Chris Warth、Ed Frank 和 Mike Sheridan 于1991年在Sun公司构想出来的。开发第一个版本花费了18个月。这种语言最初称为Oak,在1995年被命名为Java。从1992年秋Oak最初实现到1995年春Java语言的公开发布,许多人对Java的设计和改进作出了贡献。Bill Joy、Arthur van Hoff、Jonathan Payne、Frank Yellin 和Tim Lindholm 是主要贡献者,他们的贡献使Java从最初原型逐渐成熟。

        有些让人惊奇的是,Java最初的推动力不是Internet!相反,主要动机是对平台独立(即体系结构中立)语言的需要,这种语言可用于开发能够嵌入到各种消费电子设备(例如微波炉、遥控器等)的软件。您可能已经猜到了,许多不同类型的CPU被用作控制器,使用C或C++语言(以及大部分其他语言)的麻烦是,它们被设计为针对特定目标进行编译。尽管能够为各种类型的CPU编译C++程序,但是这需要一个完整的以该CPU为目标的C++编译器。问题是创建编译器很耗费时间,所以需要一种更容易并且更经济的解决方案。在寻找这样一种方案的尝试过程中,Gosling和其他人一起开始开发一种可移植的、平台独立的语言,可以使用这种语言生成在不同环境下运行各种CPU之上的代码。他们的努力最终导致了Java的出现。

        在Java的细节被开发出来的同时,第二个并且也更加重要的因素出现了,它在Java的未来中扮演了关键的角色。第二个动力当然是万维网。假如Web的形成和Java的出现不在同一时间,那么Java虽然仍会有用,但可能只是一种用于为消费电子产品编写代码的没有名气的语言。然而,随着万维网的出现,Java被推到计算机语言设计的最前沿,因为Web也需要可移植的程序。

        在为嵌入式控制器编写代码时经常遇到的可移植性问题,在尝试为Internet编写代码的过程中也出现了。到了1993年,这个问题对于Java设计小组的成员而言已经变得很明显了。实际上,最初针对解决小范围问题而设计的Java,也可以应用于更大范围的Internet。这一认识导致Java的关注点由消费类电子产品转移到了Internet编程。因此,虽然对体系结构中立的编程语言的需求提供了最初的思想火花,但最终是Internet成就了Java的成功。

        Java从C 和 C++ 中继承了许多特性,这是有意而为之。Java设计人员清楚,使用与C语言类似的语法以及模仿C++的面向对象特性,可以使Java语言对于众多经验丰富的C/C++程序员更具有吸引力。除了表面类似外,Java还借鉴了帮助C和C++成功的其他一些特性。首先,Java的设计、测试和不断改进是由真正从事编程工作的人员完成的。它是扎根于设计人员的需要和经验的一种语言。因此Java是程序员的语言。其次,Java结构紧凑并且逻辑上协调一致。最后,除了Internet强加的哪些约束外,Java为程序员提供了完全的控制权。如果程序编写的好,程序本身就能反映出来。如果程序编写的不好,程序本身也能反映出来。因为存在这样的区别,所以Java不是一种用于培训的语言,而是针对专业程序员的语言。

        因为Java与C++之间的相似性,可能会简单地将Java看作“Internet版的C++”。但是,如果这么认为将会是很大的错误。Java无论是从实践上还是在理论上都与C++有着很大的区别,虽然Java深受C++的影响,但它不是C++的增强版。例如,Java与C++既不向上兼容,也不向下兼容。当然与C++之间的相似性还是很明显的。并且如果您是一位C++程序员的话,会感觉Java很熟悉。另外一点:设计Java的目的不是取代C++。Java是针对解决特定的一系列问题而设计的。Java和C++将会长期共存。

        计算机语言的发展取决于两个因素:适应环境的变化以及实现编程艺术的提高。促使Java发展的环境变化是对平台独立的需求,Internet上的分布式系统天生就需要平台独立的程序。同时,Java也体现了编程方式的变化。例如,Java增强并改进了C++使用的面向对象编程,增加了对多线程的支持,提供了简化Internet访问的库。总之,并不是Java的某个单一特征,而是整体上作为一种语言,使它如此非凡。Java是对新出现的高度分布计算领域需求的完美响应。Java对于Internet编程的意义,就如同C语言对系统编程一样:他们都是改变世界的革命性力量。

        /*READ ME*/

        博客内容摘抄自《Java完全参考手册》(Herbert Schildt著、王德才 吴明飞译),有删改。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/whyyoualwayssilly/article/details/49969043

智能推荐

Streams--Java 8 中的 Streams API 详解_Tate-Ling的博客-程序员宅基地

转载自:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是

python sklearn库logistics_python sklearn库实现简单逻辑回归的实例代码_励练的博客-程序员宅基地

Sklearn简介Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。当我们面临机器学习问题时,便可根据下图来选择相应的方法。Sklearn具有以下特点:简单高效的数据挖掘和数据分析工...

转载一篇ECS 构架_edison_maze的博客-程序员宅基地

浅谈《守望先锋》中的 ECS 构架今天读了一篇 《守望先锋》架构设计与网络同步 。这是根据 GDC 2017 上的演讲 Overwatch Gameplay Architecture and Netcode 视频翻译而来的,所以并没有原文。由于是个一小时的演讲,不可能讲得面面俱到,所以理解起来有些困难,我反复读了三遍,然后把英文视频找来(订阅 GDC Vault 可以看,有版权)看了一遍,大致理解...

Web安全测试之XSS(Cross Site Scripting) 跨站脚本攻击_ahui456321的博客-程序员宅基地

【转自:http://www.php1.cn/Content/Web_AnQuanCeShiZhi_XSS-CrossSiteScripting-_KuaZhanJiaoBenGongJi.html】XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚...

Postman安装与使用_weixin_30590285的博客-程序员宅基地

Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。官方网站:https://www.getpostman.com/安装:1、Postman最早是作用chrome浏览器插件存在的,所以,你可以到chrome商店搜索下载安...

Spring Boot启动源码分析【一万字】_刘Java的博客-程序员宅基地_springboot启动源码分析

基于Spring Boot 2.x,详细进行了Spring Boot项目的启动源码分析

随便推点

浪潮受邀出席“市长论坛-深圳智慧城市国际圆桌研讨会”_美通社的博客-程序员宅基地

#subheadlines div {font-size: 17px;} #dvContent table[name=logo_release]+p+div[id^=prni_] {clear:both;} ...

7月第1周 | Crust Network 项目周报_旷工说事的博客-程序员宅基地

01Crust 社区活动01Crust去中心化存储市场已于2月28日正式开放。截至6月28日,全网节点2642个,全网容量达到617PB。目前网络处于代币缺少状态。从5月5日起,Crust Maxwell预览网进行了减产,此后预览网日产出为1500CRU。预览网数据可参考6月第4周周报:02【数据创造价值】活动火热进行中,为了保证活动的公平公正,让更多人能体验到Crust分布式存储的同时获得奖励,Crust技术运营团队已对“数据算力”规则进行优化升级,并立即实施,以遏

Jenkins 踩坑(四)|基于接口自动化测试完成 Jenkins+GitHub+Allure 的结合_普通网友的博客-程序员宅基地

本文为霍格沃兹测试学院优秀学员 Jekins 学习踩坑笔记。测试开发技能进阶,文末加群。一、前提关于使用Jenkins创建job完成自动化测试,核心在于项目的拉取和执行,至于job的创建大同小异,需要了解的可以参考文章: [Jenkins之job创建、参数化与定时构建以及时区偏差填坑]另外还需要的就是执行机的环境(以GitHub拉取项目为例),需要具体细节操作可自行百度Google或参考文章: [Jenkins如何管理、配置、运行node节点,用slave进行分布式运行]* 需要配置`Jav.

3D开发基础知识和简单示例_问·道的博客-程序员宅基地

3D开发基础知识和简单示例 引言现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象。那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当然还有体感游戏等等。3D 用...

python flask与django的区别_【Python基础】flask和django的对比区别是什么 - 收获啦_久微的博客-程序员宅基地

首先:Django 是一个重量级的框架,Flask是一个轻量型的框架;那么Django框架他到底重在哪呢?对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。提供项目工程管理的自动化脚本工具数据库ORM支持(对象关系映射,英语:Object Relational Mapping)模板表单Admin管理站点文件管理认证权限session机制缓存Django是用python语言...

excel 二进制流js接收_jmp_triumph的博客-程序员宅基地

js代码import ElementUI from 'element-ui'import {requestDownload} from '@/api/request.js'/** 时间戳转换成日期* */export const timestampToTime = function (timestamp) { let date = new Date(timestamp) let Y = date.getFullYear() + '-' let M = (date.getMont

推荐文章

热门文章

相关标签