JDK等于Java SE,但JDK并不等于Java EE?

14

请确认上述声明?

当他们提到 JDK 时,我需要知道他们指的是什么。


1
我认为你指的是Java SE和Java EE,而不是“JSE”和“JEE”。 - Tom Hawtin - tackline
7个回答

59

Java开发工具包(Java Development Kit)通常是我们用于创建Java应用程序的一组工具,包括Java编译器(将JAVA源类翻译为.class字节码文件)、Java虚拟机(执行这些.class文件)、JAR工具(压缩或提取应用程序)等。

Java标准版(Java Standard Edition)通常指构成大多数Java程序基础的核心类,例如集合API(List,Map,Set等),java.lang包中的类,I/O类,线程API,RMI包和类,i18n(国际化)类,JDBC API,当然还有用于创建桌面应用程序和小程序的AWT和Swing类。这些API是所有其他“Java”程序的基础,例如IntelliJ IDEA IDE,Servlet容器(如Tomcat),RDBMS(如Apache Derby)或自定义独立客户端,例如SQuirreL。您可以在JDK中获得这些类(只需打开JDK文件夹下的src.zip文件并查看其中的内容:))。

Java EE是一种规范及其子规范,作为一个整体,定义了一组服务,实现(如GlassFish或IBM的WebSphere)应提供这些服务以符合规范。这些“实现”是所谓的Java EE容器。当您听到人们说“GlassFish是Java EE 1.6实现”时,他们的意思是GlassFish(使用Java标准版类编写的Java程序)提供了Java EE 6系列规范定义的所有功能。

Java EE规范旨在覆盖“企业级”应用程序开发领域中的特定需求,例如Servlet规范用于HTTP请求-响应处理,EJB规范用于事务管理和组件生命周期管理,JMS规范用于消息服务等。Java EE容器(WebLogic,WebSphere,Tomcat)提供这些规范的实际实现作为类。简单地说,这些容器为Java EE API提供了JAR文件。这些JAR文件中的类使用Java SE核心类。我认为最后一句话将Java SE和Java EE联系起来。
总之,JDK只是一组您下载并执行的程序,用于创建和执行您用Java编写的程序。如果您有一个仅使用“核心类”并且不需要“企业服务”的Java程序,则在JSE上运行您的Java程序。最后,如果您需要提供某些功能,并且Java EE规范的任何实现都满足您的需求,比如说你需要处理HTTP请求,那么根据规范创建一个组件(在本例中是一个Servlet),并将其部署到您的Java EE容器中,例如Tomcat。
希望这可以帮助您。

谢谢,这帮了很多忙。这意味着Java SE基本上是JDK的一部分。 - ajsie
你觉得Java SE等于JDK加上JRE,还是JDK等于Java SE加上JRE? - ajsie
3
我更倾向于后者而非前者。我认为可以公正地说,JDK是JRE(虚拟机)加上Java SE类。为了让你的陈述更准确,我会包括那些不太显眼的工具,比如编译器、JAR工具、JAR签名工具等,它们随JDK一同提供。我认为这是一个观点问题。这就是为什么我在原始回复中只提供我认为的“生硬事实”。祝好,YJ - Ytsejammer

11

当您下载 标准 Java 开发工具包时,您会获得 Java 的标准版(Java SE)以及一个带有开发工具(编译器等)的开发形式(JDK)。没有开发工具(编译器等),Java runtime(JRE)是同一套库等。

Java EE 是一组附加的 API/接口(以及通常带有这些接口的某些实现)。这些是用于 Web 应用程序、EJB 等的 API。如果您拥有这些附加的 API 和实现,可以使用 JDK 进行构建。通常情况下,Java EE 应用程序将在应用程序或 Web 容器中运行。

请注意,直到最近,Java SE 被称为 J2SE,而 Java EE 被称为 J2EE。这种情况进一步混淆了许多人(尤其是招聘人员),他们将 J2EE 与 EJB(仅是 Java EE 中的一种技术)混淆。

您并不孤单,很多经验丰富的专业人士都很困惑这些术语的确切含义,Sun 公司也没有帮助解决这个问题,他们推出了 Java 2 v1.6 (或者是 Java 6?),并将 J2EE 改名为 Java EE。


你最后一句可能是想说J2EE而不是J2SE :) 尽管如此,还是点个赞。 - BalusC
据我所知,“Java 2”这个称呼在1.4版本发布后被废除了,从那时起应该使用“Java 5”和“Java 6”。 - Michael Borgwardt
@Michael - 是的,我认为你是对的。我记不太清楚细节了。 - Brian Agnew
你说:“Java EE容器(WebLogic、WebSphere、Tomcat)提供这些规范的实际实现作为类。”这是否意味着在https://docs.oracle.com/javaee/6/api/allclasses-noframe.html下找到的javax.*类实际上并非由Oracle编写/提供,而是由第三方提供的? - Phillip

6
使用以上定义,您将找到Java SE(一组Java功能)的JDK和Java EE的JDK(Java SE中的功能+一些“企业”功能)。
Java标准版和Java企业版是Java语言的定义和API,而JDK是使用这些功能开发所需的工具。

但是为什么他们的网站上有JDK6 = JSE呢?而且当涉及到JEE时,他们只称其为JEE。 - ajsie
如果这是真的,那么Java EE JDK 8版本如何包含Java SE JDK 10版本的功能和库呢?因为后者JDK发布时间比EE版本晚。 - Jack

5

更明确地说

Java SE -- Java标准版,有两个版本:JDK和JRE。JDK有编译器和其他工具。

Java EE -- Java企业版仅是一个标准,由一些主要由接口组成的库组成。虽然可以下载Java EE的“独立”组件,但它们单独并没有太大价值(再次强调,它们主要只是接口),通常会与您用于部署或开发Java EE应用程序的容器捆绑在一起。此外,Java EE包括许多标准(JMS、JSF等等)。


它们都是Java SE。JRE是运行时组件。几乎所有“Java SE”应用程序都可以在JRE上运行。例如,Tomcat是符合JEE标准的Web容器,可以说是JSE应用程序,因为它只需要JRE即可运行,尽管它实现了部分JEE。过去,Tomcat需要JDK才能使用Java编译器。但是今天,它只需要JRE。如果有什么区别,JDK是JSE的超集。 - Will Hartung

2

通常情况下,JDK指的是Java SE开发工具包。你也可以在相应的下载页面上看到这个缩写,而不是Java EE开发工具包或Java ME开发工具包的页面。


好的,这就是我需要知道的。所以JRE不等于JSE,就像另一个人说的那样。 - ajsie
不,如果我正确理解整个区别的话,JRE是JSE以及JEE的一部分。 - Horst Gutmann

0

JDK = Java Development Kit。

Java SE = Java标准版(又称JRE)

Java EE = Java企业版(又称J2EE)


更新:太阳公司并不以其明确的命名约定而闻名(例如Java 1.5和Java 5.0是同一回事)。

总结起来就是: 如果你想要运行Java应用程序,请访问http://www.java.com并点击下载按钮。

如果你想要编写Java应用程序,请访问http://developer.sun.com并浏览页面,直到找到一个大约80MB大小名为"JDK"的下载链接。根据你开发的类型(Web应用程序、控制台应用程序等),有几个不同版本的JDK可供选择。


但是当我前往JSE的下载页面时,它显示JDK6。所以JSE = JDK?你确定JSE = JRE吗?难道JRE不是运行环境(需要它来打开Java应用程序),而JSE是开发环境(需要它来开发Java应用程序)吗? - ajsie
@unknown:在我看来,运行时版本和开发工具包之间的区别与标准版和企业版之间的区别没有太大关系。下载页面甚至指出,JRE是JDK的一部分(因为如果没有运行时组件,你怎么执行编译后的代码呢;-))。 - Horst Gutmann
非常错误的相关性。JRE 不是 a.k.a. JavaSE(或 J2SE)。JRE 只是运行 Java 应用程序所需的最低限度 - 它是 Java 运行时环境,而 J2SE 是标准 Java 库的规范。 - Giorgi Tsiklauri

-3

JDK = Java 开发工具包

Java SE = Java 标准版

Java EE = Java 企业版


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接