你是否在很多时候都见到了Java SE、Java EE、Java ME这几个词, 每一次你觉得自己好像认识它们了, 但却说不清楚它们到底有哪些具体的区别?
你是否遇到过有人告诉你学好Java就是学好Java SE的情况, 可是转个弯你就在网上看到了招聘的要求上面写着需要具备精通Java EE的能力? 更有甚者EE是什么鬼呢, 它到底算不算Java的一部分。
这个问题啊, 它也是把我给搞得烦心了很久很久, 一直在我的脑子里头转悠。
今天咱们要把这些剪不断、理还乱的关系彻底掰扯明白, 读完这篇文章之后, 你不仅能够分清 SE、EE 和 ME, 还可以弄懂什么是现代 Java 开发的学习主线, 从此以后你就不再会面临选择困难症了。
在这些年份当中, 出现过这样的时刻, 我当时被这三个词语搞得头晕脑胀、完全搞不清楚状况。
说句实在话, 当我在进行Java程序学习的过程当中时候, 出现在脑袋里面的种种疑问之处那可是存在得非常多非常多的。
这些问题一度使得我决定摔碎键盘, 后来我将技术体系之间的关系梳理全面之后才突然明白: 原本从高位视角观察, Java 的版图像素变得非常清晰, 现在把我梳理的结果全部分享。
Java技术体系的全家福, 你可以用商业帝国来做一个比喻, 这样就可以一下子明白三大平台各自都是什么意思。
假如说, 把那个叫做Java的技术体系给看作成了是一个规模非常大的商业帝国的话呢, 那么它所存在的这三种不同的版本, 它们所各自承担的角色情况, 是这样的一个样子。
Java SE, 也就是所谓的标准版技术, 它就相当于我们说的整个庞大生态系统或体系当中最基础的那个底子以及最核心的那个支撑。
Java EE这个词, 它指的就是那种, 像是在坚实的地基之上, 一点一滴盖起来的大型的商业大厦。
可以把Java ME理解为微型版, 这就相当于是给在螺蛳壳里做道场准备的, 专门设计出来的精简功能的样板间。
Java SE这个东西, 那是无论你怎么转都绝对没办法绕过去的极其核心的存在, 那么它到底是什么样的一个玩意儿呢。
Java SE是Java技术的核心平台, 它提供了Java语言的核心API和运行环境。
简单来说:
Java SE具体是包含了哪些内容呢。
你最主要打交道的那些个核心库啊。
包名用途举例
java.lang
语言基础支撑
、、、
java.util
工具类与集合
、、Date
java.io
文件与流操作
、
网络编程
、URL、
java.time
把时间换成了现代化日期和时间。
、
java.
并发编程
、
必须要用到的开发工具, 有以下几个。
Java SE的版本演进之路, 是一直在不断向前推进的。
从1996年Java SE发布到这个时候为止, 它经历了多次重大的升级操作。
版本年份重大特性
Java SE 8
2014
表达式、 流、(目前企业最主流的基石)
Java SE 11
2018
HTTP 、局部变量类型推断 var
Java SE 17
2021
密封类, 还有那匹配能力更强大的模式, 这算是新一代长期支持版本里的主力内容了。
Java SE 21
2023
虚拟线程这个概念, 还有结构化并发, 被很多人看作是未来的一个非常重要的风向标。
这里是一个小贴士, 目前企业里面主要采用的是Java 8以及Java 17这俩版本, 而Java 21则是最新的长期支持版本, 它代表了未来的发展方向。
关于Java EE, 也就是大家常说的EE这一部分, 它主要是企业级开发的舞台, 那么具体来说, 这个技术平台究竟解决的是什么实际问题呢。
Java EE, 也就是Java企业版这个平台, 它是建立在了Java SE这个基础之上的, 专门用来支持开发者去进行企业级别的应用开发工作的一个工具框架。
其核心的定位, 在于去解决那些大型企业的分布式系统所带来的开发问题。
打个比方:
Java EE的核心技术栈
在Web开发这一层面。
// Servlet:处理HTTP请求的基础@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
-- -->
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
-- -->
resp.getWriter().write("Hello!");
}
}
// JSP:嵌入Java的HTML页面
// <%@ page contentType="text/html;charset=UTF-8" %>
// <% String name = request.getParameter("name"); %>
//
Hello, <%= name %>
数据库持久层:
// JPA:Java持久化API@Entity
@Table(name = "users")
public class User {
-- -->
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(unique = true)
private String email;
}
企业级服务:
Java EE这个说法变成了EE, 这中间到底发生了什么事情?
到了二零一七年的时候, 有人把Java EE这个技术的归属权捐献给了相关的基金会。因为涉及到商标权方面的问题, 后来的版本就不能继续使用 javax 这样的名字开头了, 所以这个东西就正式改名为 EE 了。
// 旧版 (Java EE 8 及以前)import javax.servlet.http.HttpServlet;
// 新版(Jakarta EE 9 及以后)
import jakarta.servlet.http.HttpServlet;
关于Java EE和那个东西之间到底是什么样的关系?
对于很多刚刚入门的人来说, 他们会在心里反复地纠结, 到底究竟应该去花时间学习 Java EE 这个原生版本的技术, 还是说干脆就跳过它, 转而直接去学习 Boot 这种更为方便的形式。
区别:
结论是它简化了Java EE的开发过程, 现在是企业界主流的选择。现在几乎没有任何人会自己去编写原始的Java EE代码了, 大家都在采用Boot和Cloud的组合方式来实现。
// Spring Boot简化了企业级开发@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
-- -->
SpringApplication.run(MyApp.class, args);
}
}
// 一个Controller搞定Web开发
@RestController
public class UserController {
-- -->
@Autowired
private UserService userService;
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
-- -->
return userService.findById(id);
}
}
Java ME, 它是曾经的手机操作系统里的王者, 是那个时代绝对的主流选择, 可是现在却已经开始走向衰退了, 再也找不回过去的荣耀与辉煌了。
如果你是 80、90 后,一定记得诺基亚时代用手机玩“盖房子”、“坦克大战”的日子。那些 .jar 格式的游戏,大概率就是 Java ME 写的。
核心组件:
为什么就会遭到这个时代的抛弃?
因为智能手机慢慢地变多了, Java ME就越来越没用了, 最后就从历史舞台上离开了。
时间事件
2007年
这一次的操作重新定义了手机的形态, 曾经那种依赖于Java ME系统的按键交互方式已经完全过时。
2008年
该功能的发布, 尽管在代码层面采用了Java语法来进行编写, 然而在实际运行时, 却并没有选择使用Java ME虚拟机来支持程序的执行。
2010年
诺基亚的塞班系统一路退让, 节节败退, 它的生态彻底崩盘。
2013年
诺基亚把手机的业务给卖了, 这个情况大家都知道了。
现在
Java ME现在基本上已经变成了计算机历史博物馆里的藏品, 也就是成了过去的东西了。
咱们得弄明白, 到底是因为啥缘故, Java ME这个技术最后没能够成功下去。
存在性能差的问题, 具体表现为虚拟机运行速度太慢, 导致应用在用户那里的使用体验非常糟糕。存在生态封闭的问题, 具体表现为每个厂商都拥有属于自己的一套Java ME版本。面临竞争对手太强的挑战, 具体表现为iOS系统在整体使用体验方面呈现出一片碾压之势。
关于和Java之间那种关系, 剪都剪不断, 理也理不乱, 这种状况到底是不是属于Java呢?
它采用的是Java这种编程语言的语法特点, 并且还使用了一些来自Java类库的东西。然而, 需要特别说明的是, 它所依赖的运行环境以及更底层的生态系统, 实际上是完全属于另外一套不同的体系结构。
从对比维度标准这个方面来看, 针对Java (SE/EE) 开发。
语言语法
Java
目前官方方面正在大力推崇和主推的技术方向是Java这种编程语言, 它现在受到了官方的重点关注和推广。
虚拟机
JVM
/ ART
类库
Java SE API
SDK
运行环境
任何平台
设备
开发工具
JDK
打包产物
.jar / .war
.apk / .aab
主管方
/
这里有一条小建议: 假如你学习Java的目的是为了从事开发工作, 那么推荐你直接开始学习。如果你是要学习后端Java相关技术, Java SE是必须掌握的必修课内容。
用户提出了这样一个问题, 即Java这三大平台方面, 到应当去选择哪一个来进行学习。
学习路线图
把总结这一块的维度要点给归纳出来。
是什么
Java这个编程语言, 被划分成了三种版本, 其中一种是叫做标准版的, 简称是SE;另外一种叫企业版, 简称是EE;还有一种叫做微型版的, 它的简称就是ME。
为什么
在不同的场景里面, 人们是需要采用不同的Java平台的。
怎么学
你先要把Java SE学好, 然后再去学习Web开发以及相应的框架。
注意什么
不是Java,Java ME已淘汰
简单来说, Java SE好比是内功心法, 而Java EE则是属于更高层级的招式, 构成了江湖上另外一门武学分支, 至于Java ME, 它已经被视为失传的武林秘籍, 大家不用再去寻找了。
与君共勉
撰写这篇文章之际, 我的内心深处一直有个疑问始终存在, 这个疑问是, 为何众多的刚刚入门的学习者群体, 往往会在软件工程SE领域、电子工程EE领域以及机械工程ME领域这三者之间进行长时间的反复比较与纠结, 并且难以在短时间内做出明确的选择。
后来我才弄明白这一点, 那是因为网络上的消息五花八门, 太复杂了, 所以没有人愿意用一种非常直白、简单易懂的类比方法, 把这些内在的逻辑联系给讲个清清楚楚。
学习技术这东西, 最让人头疼的事情, 往往并不是难题本身有多困难, 而是在于对于基本概念的理解和把握存在着很大的混乱状况。
如果你认为这篇文章对你有作用, 请不要仅仅收藏内容并且不执行点赞操作, 因为得到你的点赞还有关注, 是我能够保持持续输出具有较高实用性资料的核心动力所在。
如果你对于文章里提到的那些技术要点, 或者是那个一步步走的学习方向, 心里头还有多少搞不明白的地方, 那就欢迎你跑到这文章的留言处去写几句, 咱们大伙儿一块儿讨论。
在掌握 Java 这门技术的漫长路途上, 我们是同一条船的人, 要一起克服遇到的一个个难关和麻烦, 共同变强, 绝对不让自己变成连路都找不到、晕头转向的新手。