Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java到底是什么?_Java_Jvm_Terminology_Definition_Vm Implementation - Fatal编程技术网

Java到底是什么?

Java到底是什么?,java,jvm,terminology,definition,vm-implementation,Java,Jvm,Terminology,Definition,Vm Implementation,这个问题一开始听起来可能很傻,但也许一点也不傻 大多数人都知道,Java不是Java语言,因为您可以使用Scala或Groovy之类的工具编程Java Java不是一个具体的VM实现,因为还有其他的实现,不仅仅是SUN的、Microsoft的或IBM的 Java不是类框架,因为许多实现随意添加或删除类 甚至不必使用通用VM规范,甚至不必使用Java字节码,请参阅 也许这只是他们共同的一套原则,不管这是什么。这绝对不是“写一次,到处运行”,因为至少Dalvik和Microsoft VM/J#不是

这个问题一开始听起来可能很傻,但也许一点也不傻

  • 大多数人都知道,Java不是Java语言,因为您可以使用Scala或Groovy之类的工具编程Java

  • Java不是一个具体的VM实现,因为还有其他的实现,不仅仅是SUN的、Microsoft的或IBM的

  • Java不是类框架,因为许多实现随意添加或删除类

  • 甚至不必使用通用VM规范,甚至不必使用Java字节码,请参阅

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

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

编辑
许多人似乎认为java只是指编程语言。因此,支持java的移动电话必须能够使用户只使用java语言创建的类文件组成的程序。如果这是真的,java虚拟机/java运行时环境/java开发工具包将只针对java,其他jvm语言将有自己相应的xvm/xre/xdk。

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

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

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


正式地说,我认为Java是最重要的语言。

大多数人将Java视为编程语言(正如Java语言规范所定义的那样)。但也有很多人将其分解为编程语言、各种虚拟机和更大的生态系统


Java(例如商标)也有法律上的定义,但我想我现在就不谈这个了:-)

实际上,它取决于使用这个词的上下文。所有这些:语法、技术、框架、编程语言


作为旁注,Oracle对这个问题的回答如下:

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

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

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


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

你不能说Scala是Java,就像你不能说叉子是梳子一样,因为你正好用叉子梳头。或者,如果我可以提出一个经典的类比,用扳手钉钉子并不等于锤子

可以编译编译器,如果你想要编译COBOL,但是这并不意味着COBOL是C++ C++。 许多语言都将x86机器代码作为目标编译语言,那么这是否意味着它们都是一样的呢

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

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

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

这绝对是正确的答案。规范是语言的一切。其他一切都只是实现细节。@Poindexter:只有当Java是一种语言时,您的语句才成立。:)@麦克西姆:我认为术语“Java”指的是语言。“Java虚拟机(JVM)”是一个相关但完全独立的实体。JVM有一个单独的语言(字节码)和一个单独的规范:这是完全错误的,为什么经常投票?你是说jdk、jre、groovy和scala不是java的一部分?@codymanix是的,这是我的观点。Scala、Groovy和Clojure不是Java的一部分。+1绝对不是愚蠢的问题。至于没有通用VM规范的问题,这是不真实的,因为我在对Andrzej的回答的评论中链接到了这一点。Dalvik虚拟机并不声称是JVM。(甲骨文目前正就此起诉谷歌。):事实上,有四种完全不同的东西被称为“Java”:一种语言;庞大的班级图书馆;虚拟机;一个安全模型。@Daniel:语言是“Java”。我认为其他3项属于JVM,这是不同的。JVM一开始可能只是Java的一个实现,但它已经发展成了不同的东西。称之为“Java”虚拟Mac