目录
为什么应用广泛
从互联网到企业平台,Java是应用最广泛的编程语言,原因在于:
- Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行
- Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理
- Java虚拟机拥有工业级的稳定性和高度优化的性能,且经过了长时期的考验
- Java拥有最广泛的开源社区支持,各种高质量组件随时可用
Java语言常年霸占着三大市场:
-
互联网和企业应用,这是Java EE的长期优势和市场地位;
-
大数据平台,主要有Hadoop、Spark、Flink等,他们都是Java或Scala(一种运行于JVM的编程语言)开发的;
-
Android移动平台。
这意味着Java拥有最广泛的就业市场。
历史
Java最早是由SUN公司(已被Oracle收购)的詹姆斯·高斯林(高司令,人称Java之父)在上个世纪90年代初开发的一种编程语言,最初被命名为Oak,目标是针对小型家电设备的嵌入式应用。
后来互联网兴起,让Oak重新焕发了生机,于是SUN公司改造了Oak,在1995年以Java的名称正式发布,原因是Oak已经被人注册了,因此SUN注册了Java这个商标
特点
Java介于编译型语言和解释型语言之间。
编译型语言如C、C++,代码是直接编译成机器码执行。但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。
解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低
而Java是将代码编译成一种“字节码”(它类似于抽象的CPU指令),然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果
对于java虚拟机,需要为每个不同平台分别开发。为了保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列的Java虚拟机规范。
从实践的角度看,JVM的兼容性做得非常好,低版本的Java字节码完全可以正常运行在高版本的JVM上。
版本
随着Java的发展,SUN给Java又分出了三个不同版本:
-
Java ME:Micro Edition 微型版
-
针对嵌入式设备的“瘦身版”,应用于移动、无线及有限资源的环境;
-
Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”。
-
-
Java SE:Standard Edition 标准版
-
包含标准的JVM和标准库,应用于桌面环境;
-
-
Java EE:Enterprise Edition 企业版
-
在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务
-
Java EE的应用使用的虚拟机和Java SE完全相同
-
三者关系:
Java SE是整个Java平台的核心,而Java EE是进一步学习Web应用所必须的。我们熟悉的Spring等框架都是Java EE开源生态系统的一部分。
Java ME从来没有真正流行起来,反而是Android开发成为了移动平台的标准之一
学习路线
-
首先要学习Java SE,掌握Java语言本身、Java核心开发技术以及Java标准库的使用;
-
如果继续学习Java EE,那么Spring框架、数据库开发、分布式架构就是需要学习的;
-
如果要学习大数据开发,那么Hadoop、Spark、Flink这些大数据平台就是需要学习的,他们都基于Java或Scala开发;
-
如果想要学习移动开发,那么就深入Android平台,掌握Android App开发。
名词解释
- JDK:Java Development Kit 开发环境(将java源码,编译成Java字节码)
- JRE:Java Runtime Environment 运行环境(JRE通俗理解就是运行Java字节码的虚拟机)
因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE。
而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常运行Java程序。
但由于JDK包含了许多与运行无关的内容,占用的空间较大
因此运行普通的Java程序无须安装JDK,而只需要安装JRE即可
- JSR规范:Java Specification Request
- JCP组织:Java Community Process
JSR规范:Java语言的规范,凡是想给Java平台加一个功能,比如说访问数据库的功能,大家要先创建一个JSR规范,定义好接口,这样,各个数据库厂商都按照规范写出Java驱动程序,开发者就不用担心自己写的数据库代码在MySQL上能跑,却不能跑在PostgreSQL上
所以JSR是一系列的规范,从JVM的内存模型到Web程序接口,全部都标准化了。而负责审核JSR的组织就是JCP
- RI:Reference Implementation
- TCK:Technology Compatibility Kit
比如有人提议要搞一个基于Java开发的消息服务器,这个提议很好啊,但是光有提议还不行,得贴出真正能跑的代码,这就是RI。如果有其他人也想开发这样一个消息服务器,如何保证这些消息服务器对开发者来说接口、功能都是相同的?所以还得提供TCK。
通常来说,RI只是一个“能跑”的正确的代码,它不追求速度,所以,如果真正要选择一个Java的消息服务器,一般是没人用RI的,大家都会选择一个有竞争力的商用或开源产品。