2010-11-12 24 views
13

Die Frage mag auf den ersten Ton albern klingen, aber vielleicht ist es überhaupt nicht.Was genau ist Java?

  • Java ist nicht die Java-Sprache, die meisten Menschen wissen, dass, da Sie Java mit lots of other langauges wie Scala oder Groovy

  • Java ist keine konkrete VM Implementierung, da es andere Implementierung gibt es programmieren

  • aus, nicht nur SUNs, Microsofts oder IBMs.

  • Java ist nicht das Klassenframework, da viele Implementierungen nach Belieben Klassen hinzufügen oder auslassen.

  • Es ist nicht einmal, dass eine gemeinsame VM-Spezifikation oder auch Java-Bytecode muss es Dalvik VM

  • Vielleicht, was sie nur eine Reihe von Prinzipien teilen sehen verwendet werden, ist dies sein kann. Es ist definitiv nicht "Schreibe einmal, renne überall hin", da dies zumindest für Dalvik und Microsoft VM/J # nicht der Fall ist.

Also die Frage ist, was genau ist Java? Gibt es überhaupt eine genaue Definition?

BEARBEITEN Viele Leute scheinen die Meinung zu haben, dass Java nur die Programmiersprache bedeutet. Daher muss ein Java-fähiges Mobiltelefon ein Telefon sein, das es dem Benutzer ermöglicht, Programme zu verwenden, die aus Klassendateien bestehen, die nur mit der Java-Sprache erstellt wurden. Wenn dies der Fall wäre, würde das Java Virtual Machine/Java Runtime Environment/Java Development Kit nur für Java gemacht werden und andere jvm-Sprachen würden ihr eigenes entsprechendes xvm/xre/xdk haben.

+6

+1 Definitiv keine dumme Frage. – helpermethod

+2

Soweit die Frage über keine gemeinsame VM-Spezifikation, das ist nicht wahr, wie ich es in meinem Kommentar auf Andrzejs Antwort verknüpft habe. Die Dalvik VM behauptet nicht, eine JVM zu sein. (Zugegeben, Oracle verklagt derzeit Google über diesen Punkt.) – Poindexter

+0

http://www.jwz.org/doc/java.html: Tatsache ist, dass es vier völlig verschiedene Dinge gibt, die unter dem Namen '' Java '' laufen ': Eine Sprache; Eine riesige Klassenbibliothek; Eine virtuelle Maschine; Ein Sicherheitsmodell. –

Antwort

39

Java ist die Java-Sprache, eigentlich. Groovy, Scala et al kompilieren bis zu äquivalenten Bytecode, der auf der JVM ausgeführt werden kann, aber sie sind nicht Java.

Formal würde ich sagen, dass Java die JLS ist.

+7

+1 Dies ist absolut die richtige Antwort. Die Spezifikation ist alles für eine Sprache. Alles andere ist nur Implementierungsdetails. – Poindexter

+0

@Poindexter: Ihre Aussage gilt nur, wenn Java eine Sprache ist. :) – MicSim

+3

@McSim: Ich würde argumentieren, dass der Begriff "Java" auf die Sprache verweist. Die "Java Virtual Machine (JVM)" ist eine verwandte, aber völlig separate Entität. Die JVM hat eine eigene Sprache (den Bytecode) und hat eine eigene Spezifikation: http://java.sun.com/docs/books/jvms/ – Poindexter

6

Java ist eine Programmiersprache. Der Syntaxteil.

+5

Nicht der semantische Teil? – Ishtar

5

Meiner Meinung nach ist es die Sprache. Ich glaube nicht, dass Leute sagen, dass sie Java mit Groovy programmieren, oder wenn sie das tun, sind sie ungenau.

1

Die meisten Leute sehen Java als Programmiersprache (wie in der Java Language Specification definiert). Aber es gibt viele andere, die es in die Programmiersprache, die verschiedenen VMs und das größere Ökosystem aufteilen.

Es gibt auch rechtliche Definitionen dafür, was Java aufgerufen werden (zB Marke), aber ich denke, ich werde, dass man allein im Moment verlassen :-)

3

Eigentlich kommt es auf den Kontext wo das Wort verwendet wird. Es ist alles: Syntax, Technologie, Framework, Programmiersprache.

Als Nebenbemerkung, antwortet Oracle diese Frage wie folgt: What is Java?

+0

Interessant. Oracle scheint zu denken, dass es sowohl die Sprache als auch die "Plattform" (VM?) Ist. – justkt

5

Streng genommen Java nur eine Programmiersprache ist. Aber es ist eine Programmiersprache, die viele, viele Standards enthält: zum Beispiel viele APIs und JVM-Spezifikationen. Deshalb bezeichnen SUN und andere es als eine Plattform.

Andere Sprachen wie Scala, Ruby usw. sind nicht Java, sie kompilieren nur zu Byte-Code, der in einer Java Virtual Machine ausgeführt wird. Sie sind nur auf der Java-Plattform aufgebaut, sind aber selbst nicht Java.

Die JVM ist hoch standardisiert und viele Unternehmen können und bieten ihre eigenen Implementierungen für ihre Hardwareplattformen. Dies ist auch kein Java, das sind nur Implementierungen eines Teils der Java-Plattform.

Die Java-VM-Spezifikation ist zu 100% standardisiert und wird von Oracle durchgesetzt, da sie das Urheberrecht für Java beanspruchen. Aus diesem Grund ist das Android (Dalvik VM) derzeit Gegenstand eines Gerichtsverfahrens gegen Oracle gegen Oracle.

2

Sie können nicht sagen, dass Scala Java mehr ist, als Sie sagen können, dass eine Gabel ein Kamm ist, nur weil Sie zufällig Ihre Haare damit bürsten. Oder, wenn ich die klassische Analogie heranziehen darf, macht das Fahren von Nägeln mit Ihrem Schraubenschlüssel es nicht zu einem Hammer.

Sie können einen Compiler erstellen, der COBOL in C++ kompiliert, wenn Sie möchten, aber das bedeutet nicht, dass COBOL C++ ist.

Viele Sprachen haben x86-Maschinencode als ihre Ziel kompilierte Sprache, also bedeutet das, dass sie alle die gleiche Sache sind?

Es spielt keine Rolle, ob andere Sprachen zum Bytecode der JVM kompilieren können, noch ist es wichtig, dass Sie Java in den Maschinencode einer bestimmten Architektur kompilieren können. Die JVM ist immer noch Javas Plattform; Andere Sprachen teilen es einfach und Java ist zufällig in der Lage, andere Ziele als JVM-Bytecode zu kompilieren. Genauso wie eine Gabel in der Lage ist, Ihre Haare zu kämmen, je nachdem, wie Sie damit umgehen.

Ich denke, das ist eine dumme Frage (und hat nichts mit Programmierung neben zu tun). Ist es möglich, dass jemand wie ein Renaissance-Philosoph handelt und versucht zu argumentieren, dass deine Gabel eigentlich ein Kamm ist, weil du ihn nie als Gabel benutzt hast und ihn immer nur in deinem Haar verwendest? Sicher, mach weiter und streite, und vielleicht hast du sogar einen Punkt, aber hoffentlich vergeudet niemand seine Zeit damit. Das ist alles nur ein Spiel der Semantik, und wenn man anfängt, über Semantik zu streiten, verliert jeder.

(bearbeiten) Bah! Ich habe gerade gemerkt, dass ich über Semantik streite!

+0

Oh nein, wenn COBOL zu nativem Code wird und C++ zu nativem Code wird, bedeutet COBOL C++, dann hat HipHop C++ zu PHP gemacht !! – JAL