13

这个问题起初可能听起来很愚蠢,但也许根本不是。

  • Java 不是 Java 语言,大多数人都知道,因为您可以使用许多其他语言(如 Scala 或 Groovy )对 Java 进行编程

  • Java 不是具体的 VM 实现,因为那里有其他实现,不仅是 SUN、Microsoft 或 IBM。

  • Java 不是类框架,因为许多实现随意添加或遗漏类。

  • 甚至不需要使用通用的 VM 规范甚至 Java 字节码,请参阅Dalvik VM

  • 也许这只是他们共享的一套原则,不管这可能是什么。这绝对不是“一次编写,到处运行”,因为至少 Dalvik 和 Microsoft VM/J# 并非如此。

那么问题来了,Java到底是什么?甚至有一个确切的定义吗?

编辑 很多人似乎认为 java 只意味着编程语言。因此,支持 java 的手机必须是允许用户使用仅由 java 语言创建的类文件组成的程序的手机。如果这是真的,java 虚拟机/java 运行时环境/java 开发工具包将只为 java 制作,其他 jvm 语言将有自己对应的 xvm/xre/xdk。

4

7 回答 7

39

实际上, JavaJava 语言。Groovy、Scala等人编译成可以在 JVM 上运行的等效字节码,但它们不是Java。

形式上,我会说 Java 是JLS

于 2010-11-12T16:30:39.903 回答
6

Java 是一种编程语言。语法部分。

于 2010-11-12T16:30:09.577 回答
5

在我看来,这是语言。我不认为人们说他们正在使用 Groovy 编程 Java,或者如果他们这样做了,那么他们就是不准确的。

于 2010-11-12T16:30:10.930 回答
5

严格来说,Java 只是一种编程语言。但它是一种包含许多标准的编程语言:例如许多 API 和 JVM 规范。这就是 SUN 和其他人将其称为平台的原因。

Scala、Ruby 等其他语言不是Java,它们只是编译为在 Java 虚拟机中运行的字节码。它们只是构建在 Java 平台之上,但它们本身不是 Java。

JVM 是高度标准化的,许多公司可以并且确实为他们的硬件平台提供自己的实现。这也不是 Java,这些只是 Java 平台的一部分的实现。

Java VM 规范是 100% 标准化的东西,由 Oracle 强制执行,因为他们声称对 Java 拥有版权。这就是为什么Android(Dalvik VM)目前是甲骨文针对谷歌的法庭案件的主题。

于 2010-11-12T17:43:38.383 回答
3

实际上,这取决于使用该词的上下文。这就是:语法、技术、框架、编程语言。

作为旁注,Oracle 回答这个问题如下:什么是 Java?

于 2010-11-12T16:38:58.593 回答
2

你不能说 Scala 是 Java,就像你不能说叉子是梳子只是因为你碰巧用它梳头一样。或者,如果我可以提出经典的类比,用扳手敲钉子并不能使它成为锤子。

如果需要,您可以制作一个将 COBOL 编译为 C++ 的编译器,但这并不意味着 COBOL 就是 C++。

许多语言都将 x86 机器代码作为其目标编译语言,这是否意味着它们都是同一个东西?

其他语言是否可以编译为 JVM 的字节码并不重要,您是否可以将 Java 编译为特定架构的机器代码也没有关系。JVM 仍然是 Java 的平台;其他语言恰好共享它,而 Java 恰好能够编译到 JVM 字节码以外的目标。就像叉子一样,它恰好能够根据你的处理方式梳理你的头发。

我认为这是一个愚蠢的问题(此外与编程无关)。有没有可能有人表现得像文艺复兴时期的哲学家,并试图争辩说你的叉子实际上是一把梳子,因为你从来没有,曾经把它用作叉子并且总是只在你的头发上使用它?当然,继续争论吧,也许你甚至会说得有道理,但希望没有人浪费时间听它。这只是一场语义游戏,一旦你开始争论语义,每个人都会输。

(编辑)呸!我才意识到我在争论语义!

于 2010-11-14T19:05:11.560 回答
1

大多数人将 Java 视为编程语言(由 Java 语言规范定义)。但是还有很多其他人将其分为编程语言、各种 VM 和更大的生态系统。

也有可以称为 Java 的法律定义(例如商标),但我想我现在将不理会那个 :-)

于 2010-11-12T16:33:00.183 回答