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/
Java之路——Java初接触的更多相关文章
- Java之路——名词解释(一)
一.开篇 许多人在初接触Java的时候,都会被各种Java的英文缩写名词给弄得头晕脑胀.看一个技术,内容里又会有一堆其他的技术名词,看了半天不知所云.尝试去查一下这些名词的解释,除了非常学术性的解释之 ...
- Java之路——环境配置与编译运行
本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解 ...
- Java之路 ——初识Eclipse
零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...
- Java之路——初识Eclipse
零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...
- 【阿里云产品公测】消息队列服务MQS java SDK 机器人应用初体验
[阿里云产品公测]消息队列服务MQS java SDK 机器人应用初体验 作者:阿里云用户啊里新人 初体验 之 测评环境 由于MQS支持外网访问,因此我在本地做了一些简单测试(可能有些业余),之后 ...
- 我的阿里之路+Java面经考点
我的阿里之路+Java面经考点 时间:2018-03-19 23:03 来源:未知 作者:admin 点击:87次 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三 ...
- Java之路——敬JAVA初学者(作者:MoMo)
作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊! 要离开学校了,还是想留 ...
- JAVA之路(一)
距离做下复习JAVA并学好JAVA的决定已经过去一周了,我买了慕课网的JAVA入门视频,在图书馆借了三本关于JAVA的书——两本是JAVA入门经典,一本是JAVA WEB开发宝典.我的计划是短时间内复 ...
- 转行自学 Java 之路的纪念册
前言: 最近在重读<小狗钱钱>,我对其中的"成功日记"概念特别深刻,偶尔也会记一记“成功日记”. 想了想人生走找到今天,阶段性“成功日记”有没有呢? 有的!几年前的一篇 ...
随机推荐
- ORA-00265: instance recovery required, cannot set ARCHIVELOG mode
症状: 我打开后归档命令报告运行错误ORA-00265 SQL> alter database archivelog; alter database archivelog * ERROR at ...
- 如何将C#对象转化为JSON字符串
System.Web.Extensions.dll中类JavaScriptSerializer可以帮助我们把C#对象转化为JSON字符串. 有一个Person类 public class Person ...
- jQuery插件的编写相关技术 设计总结和最佳实践
原文:http://www.itzhai.com/jquery-plug-in-the-preparation-of-related-technical-design-summary-and-best ...
- MVC4中使用Ninject
MVC4中使用Ninject 1.NuGet获取Ninject.dll .NET技术交流群 199281001 .欢迎加入. 2.全局注册 Global.asax.cs RegisterNinje ...
- FormsAuthentication登录ReturnUrl使用绝对路径
ASP.NET]更简单的方法:FormsAuthentication登录ReturnUrl使用绝对路径 被这个问题困扰多年,今天终于找到了更简单的解决方法,分享一下. 问题场景 假设我们在i.cn ...
- LaTex代码生成器
latex代码生成器 希腊字母 \alpha \beta \gamma \delta \epsilon \zeta \eta \theta \iota \kappa \lambda \mu \nu \ ...
- c#中关于sealed修饰类的性能提升的测试
在clr var c#一书中,作者描述当用sealed修饰类时,可以提高系统性能而且建议大家也养成用sealed来修饰类的习惯.由于对性能二字比较敏感,所以本文先测试一下用sealed分别修饰和不修饰 ...
- iOS基础 - UIScrollView
一.UIScrollView使用引导思路. 1.之前我们所学的显示图片是用UIImageView 2.将UIImageView添加到根视图中,不显示的原因:没有设置位置 3.当图片比屏幕大时,直接放在 ...
- C++ string和c类型字符数组的比较
在c++中string是很方便操作的字符串,支持多种算数运算和比较运算,操作起来非常灵活.string也具有一些容器的性质,可以通过迭代器对字符元素进行访问 c类型的字符数组有如下三种初始化方式: / ...
- Real-Rime Rendering (1) - 渲染管线(Rendering Pipeline)
提要 渲染管线是实时渲染中最重要的部分,它的最主要的任务就是在给定一个虚拟的场景,包括相机,object,灯光,纹理等等,生成一副2D的图像. 最基础的渲染管线如下图所示: 主要的阶段包括三个:App ...