时间回到1991年,一款名为Oak(橡树)的产品正计划推出,它瞄准的方向是当时流行的各种消费性产品(如收音机、机顶盒),然而推出效果反响并不是很好,但随着1995年互联网潮流的兴起,这款产品寻找到了最适合自己发展的市场并成功蜕变成JAVA语言。
值得一提: JAVA其实是印度尼西亚一座岛屿的名称,中文名也叫爪哇,因盛产咖啡而出名。据说许多程序设计师工作之余都喜欢来一杯热腾腾的香浓咖啡(我是不太喜欢喝,可能我是假的程序员吧),并从中得到灵感,JAVA的寓意是为世人端上一杯热咖啡,因此JAVA的logo就是一个热气腾腾的咖啡形状。
Oak正是由JAVA之父James Gosling领导的绿色计划(Green Project)中的产品,在1995年更名为JAVA,并在SunWord大会上正式提出了"Write Once,Run Anywhere"口号。岁月如流,转眼间距离第一个JAVA版本诞生到现在已经20多年的时间,通过下面的时间线,一起回顾那些年我们学习过的JAVA。
时至今日(2021-11),JAVA已经更新到了JDK17,从上面的时间线图片里密密麻麻的里程碑中,我们能够知道JAVA在这些年发展之迅速。下图为TIOBE 2021年11月语言排行榜单
注:TIOBE(The TIOBE Programming Community index)是编程语言流行程度的一个指示器,排名的依据是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube和Baidu(百度)统计出排名数据,只是反映某个编程语言的热门程度
官方网站:TIOBE
对JAVA之父的采访:Interview with James Gosling, Father of Java
从1995年在Sun World大会上的1.0版本正式提出“Write Once,Run Anywhere”到现在常年占据编程语言流行排行榜Top3,JAVA为什么能够如此受欢迎?下面我们就来盘点盘点!
1、面向对象编程
所谓面向对象指的是在进行程序开发时将应用程序的数据及操作方法封装成一个便于我们理解的"对象"的特性,使我们在开发过程能够更易理解、并实现信息的封装及模块化。
简单讲就是一个程序就可以被抽象成一个人,一个人会有两个眼睛、一个嘴巴等属性,可以有吃饭、行走等行为,程序也可以抽象成类似的属性和行为。
关于面向对象编程更详细的解释请看之前的一篇博文:面向接口编程
2、简单性
说一个东西简不简单其实是需要有东西对比才能够体现出来,了解或者学习过其他语言(如C++)的小伙伴就知道,JAVA中大体上语法和C++相类似,但是C++中一些比较难以理解、容易混淆的概念在JAVA中是没有的(如指针),JAVA是通过一种更清楚、更易理解的方式(即引用)来实现这些容易让人混淆的概念,所以对比起来就会感觉JAVA是更加简单的。
3、跨平台
跨平台指的是使用JAVA语言开发的程序能够运行在不同的软件平台和硬件平台上。 程序最终的执行是需要转成计算机硬件的机器指令来执行,而不同操作系统的、不同的计算机硬件是存在差异的,因此专门为某一种计算机硬件或者软件开发的程序直接放在另一个计算机硬件上是无法执行的(就像让大人穿小孩子的衣服,撑爆了也穿不进去),至少需要做移植操作,比如有些在Windows系统上编译的应用程序是无法直接拿到Unix系统上运行的。
想要解决这个问题,则需要程序语言不依赖于特定的操作系统或硬件,JAVA语言则正好满足这个条件,JAVA中引入了虚拟机概念,JVM实现了不同平台的JAVA接口,屏蔽了底层硬件的差异性,JAVA编译器将JAVA语言开发的程序编程成与计算机结构无关的字节码(也就是我们常说的class文件),只要安装了JAVA虚拟机,JAVA应用程序就可以在相应的环境下被执行。
4、健壮性
何为健壮性:通俗理解含义是软件(程序)对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。 比如:一个字段取值只允许为数组和字母,但是用户却输入了中文,此时,对于规范以外(非数组和字母)的输入,程序需要能够作出合理的响应(如提示用户输入不符合规范),而不是直接报错或者无响应。
再举个通俗的例子:你到银行提款机取钱,但是输入密码后提款机就卡死了,该怎么办?这时候你可以请求柜员帮助,柜员可以理解为银行为异常情况提供了一个兜底方案,这时候你肯定会给银行好评,因为如果没有柜员,提款机卡死后你除了等待就无法做其他事情,想要拿回银行卡就可能需要等到银行派专门人来才行,这时候用户体验就会非常差,程序亦是如此。
使用JAVA语言编写的程序则具有这方面的特性。首先JAVA语言程序会在编译和运行时对可能出现的问题进行检查,减少因未知原因导致程序崩溃的情况。同时,JAVA语言提供了异常处理机制,它能够在编译时提示未被处理异常或者为运行抛出异常提供兜底方案,防止程序崩溃。
5、安全性
JAVA可以说是一种安全的网络语言,它屏蔽了指针类型,对内存的操作通过对象实例实现,同时,JAVA还在编译、解释层面进行了安全性的保证。
如:在编译层,JAVA会进行各种语法检测,不满足语法的写法在编译时报错无法被解释执行,在解释层,会对JAVA程序编译出来的字节码校验,同时还会进行代码段格式、类型转换是否合法等方面的检查,从而保障程序执行的一个安全性。
6、支持多线程
随着科技的发展,人们对软件的使用体验有了更高的要求,响应速度就是其中非常重要的指标。JAVA内置了多线程的支持,通过多线程,计算机可以同时处理多个任务,因为处理器处速度远快于人接受信息的速度,人们会感觉软件的响应非常快,用户体验非常好。
7、可移植性
JAVA的可移植性主要与它的跨平台(平台无关性)有关,JAVA中的类库也实现了与平台无关的接口,从而具有了可移植性。JAVA的编译器也是使用JAVA语言编写的(源码可查看:JAVA编译器实现),解释器则是由标准的C实现,所以整个JAVA系统都具有可移植性。
8、动态性
JAVA中基础的单元就是类,类可以是开发者自定义,也可以是引用第三方定义好的类库,在JAVA中,类是运行时动态进行状态的,因此对类库添加新的属性和方法无序重新编译程序,这样JAVA就实现了动态维护程序和引用的类库。
而C/C++则是在编译时将相应的函数库或类库中使用到的类、函数生成机器码,如果后续类库升级如添加了新的函数,则C/C++程序想要使用类库中新增的功能,需要对程序进行重新修改、编译。
9、社区活跃度高、文档齐全
这个特点是得益于前面的描述的8个特点,正是因为JAVA语言有简单、跨平台等特性,才会吸引大量的开发者,社区的活跃度才会高,层层嵌套,所以JAVA才会流行至今。
除了上面举例的一些特点,你认为有哪些原因让JAVA从推出到至今还是如此流行呢?你觉的JAVA自身又存在哪些缺陷呢?欢迎您留言讨论。