Java之路——Java初接触
本文大纲
1.Java是什么
2.Java历史
3.Java技术范围
3.1 Java SE平台技术范围
3.2 Java EE技术范围
3.3 Java 体系技术范围
4.总结
1.Java是什么
我认为,要学好一样东西,首先要知道,自己在学的东西是什么。没有一个总体的概念,就会觉得所学到的知识都是一些零星的概念,没有总体的感觉,很难形成一个知识体系,那东西就很难记得住了。所以在学习Java的时候,我们首先要弄明白,Java是什么这一问题。
那Java是什么呢?Java必然是一门编程语言,这是毋庸置疑的。但它却不仅仅是一门编程语言,它还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完善的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场景[1] 。这句话怎么理解呢?接触到后面的内容,你将会深入理解到。在这里我简单介绍一下。首先,Java是一门面向对象的编程语言,就如同C#等语言一样,而与C语言等面向过程的语言不一样。其次,Java的口号是"Write Once, Run Anawhere",它能通过Java虚拟机等技术,代码只需一份,编译成中间语言之后,放到Java虚拟机上运行,Java虚拟机根据本地硬件环境编译成最终操作系统能识别的语言进行处理,从而摆脱硬件平台的束缚,进行跨平台的开发部署。再有,Java已经广泛应用到各大场景,那究竟有多广泛呢,可以看一下以下数据[2]:
- 97% 的企业桌面运行 Java
- 美国有 89% 的桌面(或计算机)运行 Java
- 全球有 900 万 Java 开发人员
- 开发人员的头号选择
- 排名第一的部署平台
- 有 30 亿部移动电话运行 Java
- 100% 的蓝光盘播放器附带了 Java
- 有 50 亿张 Java 卡在使用
- 1.25 亿台 TV 设备运行 Java
- 前 5 个原始设备制造商均提供了 Java ME
2.Java历史
Java语言在1995年正式发布1.0版本,距今已经有22年了。在这漫长的时间里,Java又得到了很大的发展。大概的发展历程和版本升级可以看下图的发展历程[3],详细的情况网上到处可查,我就不多说了。在这里我主要抽几个重点时刻来讲一下。
- 1995年5月,Sun Microsystems公开发布了Java语言1.0版本,并提出口号"Write Once, Run Anywhere"(WORA)。
- 1996年1月,JDK1.0版本正式发布,Java语言有了第一个正式版本的运行环境。
- 1998年底,JDK1.2版本发布。在此版本中,Java技术体系开始拆分为我们目前经常说的三个方向,分别是面向桌面应用开发的J2SE(Java 2 Platform, Standard Edition),面向企业级开发的J2EE(Java 2 Platform, Enterprise Edition)和面向手机等移动终端开发的J2ME(Java 2 Platform, Micro Edition)。关于J2这个名字,直到2006年,Sun公司又对这三个方向进行了重新命名,分别为Java SE, Java EE和Java ME。所以大家有时候看到有些地方说J2EE,有些地方又说Java EE,基本都是指一样的东西,只是时代不一样而已,不要太过纠结。在这个1.2的版本中,还有很多代表性的技术出现,如EJB、Java IDL、Swing等,有兴趣了解的同学可以查一下。
- 2000年5月,HotSpot虚拟机(一种Java虚拟机,名字叫HotSpot)成为了JDK1.3及之后所有版本的Sun JDK的默认虚拟机。也就是说,我们现在默认使用的Java虚拟机就是HotSpot虚拟机,所以大家在今后的学习中,特别是要进行性能调优等方便处理的时候,要注意对HotSpot虚拟机的学习。
- 2006年11月,Sun公司宣布对Java开源,并在随后的一年多时间内,陆续将JDK的各个部分在GPL v2(一种开源协议)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。所以,很多时候我们都会接触到OpenJDK这个名词,特别是在装linux的时候,如果你选择了某些安装包,就会自动装上OpenJDK,其实就代表着JDK的开源版本。
- 2009年4月,Oracle收购了Sun公司。所以现在Java商标属于Oracle的了。
了解一个产品的发展历史,有助于我们对这个产品产生更深刻的认识。也能从中知道一些我们经常用的技术,其实已经在很多年前就出现成熟了。这能让我们对技术的发展有个大概的了解,知道了技术发展的趋势,更好的学习各种技术。直至目前,Oracle官网最新发布的JDK为8u111/8u112,想必大家对Java 8的很多特性都还没有完全熟悉,Java 9又准备到来了。所以不要犹豫,紧跟技术发展路线,才能跟上时代的步伐。
3.Java技术范围
本来想将这一节命名为"Java技术体系"的,但感觉题目太技术了,说实在我也说不准究竟Java技术体系最正规的表现是怎样了,所以思前想后,还是命名为"Java技术范围"这样一个听上去不是很响亮的名字,给自己留个余地。
学习一样东西,我认为比较重要的是先了解究竟这东西包含了什么内容。对所包含的内容有个大概了解,才能分清主次,知道自己要学什么,次学什么。如果对所学习的知识没有个认识,那就像在沙漠中走路,你永远不知道什么时候是个尽头,心里没有底,学起来就漫无目的,事倍功半了。
3.1 Java SE平台技术范围
首先,要了解Java技术体系,就需要先了解我们经常听到的JRE、JDK包含了什么内容。我们通常把Java编程语言、Java虚拟机及Java API类库三部分统称为JDK(Java Development Kit),它除包含JRE中所有的东西以外,还有一些开发者用于编译、调试等工具。下图是摘自Oracle官网上的Java SE 8的组成描述[4]:
图中有各种专业名词,看着挺晕的,所以这里暂不累赘,如想了解的同学可以先参考官方文档(http://docs.oracle.com/javase/8/docs/technotes/guides/desc_jdk_structure.html),后续会抽取重点内容进行展开。在这里讲几点直观看到的内容。
- JRE是JDK的一个子集,JDK包含了JRE的所有内容,同时多了开发时所需要用到的Tools和Tools API。所以大家在开发的时候,要使用JDK作为Java的环境,不要仅仅用JRE,不然当做一些开发工作,如使用IDE进行调试的时候会报错。
- JDK包含了最顶层的Java编程语言、最底层的Java虚拟机以及中间的一大堆Java API。
- 在Java SE 8中,Java虚拟机还是使用HotSpot虚拟机作为默认虚拟机。
- 在基础类库中,我们可以看到,lang和util尤为突出,说明他们是使用频率最高的类库,在学习过程中,最好对里面的类有所了解。
3.2 Java EE技术范围
平时在工作中,通常建的网站项目,都需要用到Java EE部分的内容了。Java EE与Java SE有什么关系呢?简单来说,Java SE是基础,没有Java SE,什么Java内容都运行不了。而Java EE,是在Java SE基础上,提供更多的组件供企业级应用开发。从网上找了一幅图,描述了Java EE 7中的各个组件[5]。
展示这幅图,主要是想让大家看看,Java EE涵盖了我们经常见到的JSP、Servlet、EJB、JPA、JMS等内容,大家先有个印象,知道这些组件是属于Java EE的内容,今后再对各个组件进行展开讲解。
3.3 Java 体系技术范围
Java平台的相关知识,也就是JDK里面的内容,是Java的基础知识,需要打好坚实的基础。有很多人一开始学习java就去了解框架啊之类的东西,可能可以在短时间内应付到工作,做一些小东西,但当遇到问题的时候,却不知如何入手,无法解决,这就是基础知识没有打牢固的缘故了。学习一门知识,最重要把基础打牢,能做到举一反三,其实上层的技术都是底层技术累积出来的,万变不离其中。所以基础要打好,才能将一门知识学习。
那基础打牢之后,就如刚刚所说的,还会有很多累积起来的上层技术、框架以及围绕其中心的周边技术、工具等内容。这些知识也是日常工作中会用到的,我们同样也需对其有所了解。ZeroTurnaround对于当年的Java工具和技术的使用情况等会做一些报告,其中对2014年的报告做了一个思维导图[6],虽然这两年的技术会有所发展,开发者的使用比例也会有所改变,但是主流的技术不是一时半刻可以转变的。图中提到的技术对我们了解Java体系的技术内容,还是很有参考价值的。
在实际的工作中,我们对上图中14个范畴几乎每个都会有所涉及,可见学好Java并不是一件容易的事情。每个范畴的技术都有好几项,我们精力有限,所以主要关注每个范畴的前一两项就好。精力无限的同学,在精通了每个范畴的前两项后,可以再接触一下后面的技术,做一些对比,总结一下为什么那个多人用,这个少人用,能力也就得到质的提高了。ZeroTurnaround也对2016的Java工具和技术做了个报告总结,但没有做成思维导图,所以没展示出来,有兴趣的同学可以通过此地址https://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-2016/ 了解到2016年的情况。
4.总结
总结一下,这是Java初学的第一篇内容——Java初接触。文章内没有对技术进行太多的展开讲解,可能有些同学就不耐烦了,认为讲这么多东西没讲到重点,一篇文章看下来没有学到什么东西。我个人认为不然。学任何东西,都应该知道自己在学什么东西,这样对所学的东西才能应付自如。就好比你要对付一个敌人,人家门口放着刀枪炮舰你就吓得半死,仓皇逃跑。但如果你走进去看,发现只是只虚张声势的蟑螂,那你就能胸有成竹的把刀枪炮弹一一拆解了。本文章主要对Java是什么、历史、及技术范围等内容作了阐述,了解清楚了这些部分,后续的学习就不会彷徨,不会一边学习,一边在问自己,"我究竟在学什么"了!
参考资料:
[1] 周志明(2016年5月),《深入裂解Java虚拟机第二版》
[2] 了解Java技术,2017.1.12取自https://www.java.com/zh_CN/about/
[3] A Short History of Nearly Everything Java, 2017.1.12取自https://zeroturnaround.com/rebellabs/a-short-history-of-nearly-everything-java/3/
[4] Java Platform Standard Edition 8 Documentation,2017.1.12取自http://docs.oracle.com/javase/8/docs/index.html
[5] Java EE 8愿望清单:缺少这些,Java EE将不会完美,2017.1.12取自http://www.okbase.net/doc/details/4727
[6] The complete "Java Tools and Technology Landscape for 2014" report data in a single mind map image, 2017.1.12取自https://zeroturnaround.com/rebellabs/the-complete-java-tools-and-technology-landscape-for-2014-report-data-in-a-single-mind-map-image/