Konsequenzen der Ausführung einer Java-Klassendatei auf verschiedenen JREs?

StackOverflow https://stackoverflow.com/questions/114457

  •  02-07-2019
  •  | 
  •  

Frage

Welche Konsequenzen hat die Ausführung einer in JDK 1.4.2 kompilierten Java-Klassendatei auf JRE 1.6 oder 1.5?

War es hilfreich?

Lösung

Die Java SE 6 Kompatibilität Seite listet die Kompatibilität von Jave SE 6 auf Java SE 5.0. Darüber hinaus gibt es einen Link zu Inkompatibilitäten in J2SE 5.0 (seit 1.4.2) als auch. Mit Blick auf die beiden Dokumente, sollte es möglich sein, um herauszufinden, ob es irgendwelche incomapatibilities von Programmen geschrieben unter JDK 1.4.2 und Java SE 6.

Im Hinblick auf die binäre Kompatibilität der Java-Klassendateien, hat die Java SE 6 Compatibility Seite folgendes zu sagen:

  

Java SE 6 ist nach oben binärkompatibel   mit J2SE 5.0 mit Ausnahme des    Inkompatibilitäten unten aufgeführt. Außer   für die genannten Unvereinbarkeiten, Klasse   gebaut Dateien mit Compiler Version 5.0   korrekt ausgeführt wird in JDK 6.

Also, im Allgemeinen, wie workmad3 erwähnt, Java-Klasse-Dateien auf einem älteren JDK kompiliert werden noch mit der neuesten Version kompatibel sein. Des Weiteren, wie erwähnt von Desty werden alle Änderungen an der API im allgemeinen als veraltet und nicht entfernt werden.

Aus dem Quelle Kompatibilitäten Abschnitt:

  

Veraltete APIs sind Schnittstellen, die   nur für die Abwärts unterstützt   Kompatibilität. Der javac Compiler   eine Warnmeldung, wenn   einer von ihnen verwendet wird, es sei denn, die   -nowarn Befehlszeilenoption verwendet wird. Es wird empfohlen, dass die Programme sein   modifiziert, um die Verwendung zu beseitigen,   veraltete APIs, obwohl es keine   aktuelle Pläne solche APIs zu entfernen   vollständig aus dem System mit der   Ausnahme von JVMDI und JVMPI.

Es gibt eine lange Liste von Leistungsverbesserungen in der Java SE 6 Performance-Weiß Papier .

Andere Tipps

Java-Klassen sind vorwärts kompatibel, z.B. generierten Klassen 1.5-Compiler erfolgreich ohne Probleme geladen und ausgeführt werden auf JRE 1.6. Im Allgemeinen wird Ihre Klassen genereated von heute Java-Compiler mit Zukunft JREs kompatibel sein (zum Beispiel Java7)

Die inverse nicht gilt: Sie keine Klassen von 1.6 auf ältere JREs erzeugt laufen kann (1.3, 1.4, usw.)

.

Java-Compiler Quelle angeben und Compliance-Ebene zielgerichtet arbeiten. Auf diese Weise können Sie für jede JRE von jedem anderen höheren versioniert JRE kompilieren. Sie müssen sicherstellen, dass diese Compliance-Ebene zu verwenden, da es API Unterschiede zwischen JREs sind. Zum Beispiel JRE 1.5 Stringbuilder auf der Compiler-Ebene eingeführt. Das bedeutet, wann immer Sie tun:

String s = "string1" + "string2";

Der Compiler ändert es an:

String s = new StringBuilder("string1").append("string2").toString();

Offensichtlich wird dies mit einem NoClassDefFoundError brechen, wenn Sie die Stringbuilder zu konstruieren versuchen.

Theoretisch nichts. Die JVM ist angeblich rückwärtskompatibel. Ich selbst habe noch nie ein Problem in dieser Richtung.

Hängt ganz auf welche Teile der Java-Bibliothek, die Sie verwenden. Es könnte alles von ‚absolut in Ordnung, kein Unterschied auch immer‘ zu ‚OMG sein !! WARUM HAT ER GERADE MEINE FESTPLATTE FORMATTED ??‘ (Na ja, vielleicht nicht der zweite, sondern es dient dazu, den Punkt davon aus dem Nichts geht zu unterstützen, um möglicherweise schlecht:)).

Ihre Klasse könnte auch auch auf Fehlerbehebung in der Bibliothek abholen, die nagenden Fehler verschwinden bedeuten würde (oder könnte je nach eingeführt werden, wenn Sie auf fehlerhaftes Verhalten oder nicht wurden unter Berufung).

AFAIK aber der Java-Bytecode ist abwärtskompatibel, so dass Sie nicht nur mit ihm irgendwelche Probleme bekommen sollen nichts zu tun.

Eine positive Folge ist, dass die 1,4-Klassen nach wie vor auf die JVM gemacht Vorteil der Geschwindigkeit Verbesserungen nehmen (wenn auch nicht necesarily Verbesserungen Bibliothek Klassen).

lief in ein Problem wie diese selbst. Ich war das Schreiben von Code, der mit 1.6, aber das College hatte 1.3 installiert funktionieren soll. Viele Methoden funktionieren einfach nicht d.h

input = "" + JOptionPane.showInputDialog (null, "eine vierstellige Zahl eingeben, um" + (b? "Verschlüsseln": "entschlüsseln") +“ " (b?" 4086. ":" 5317" ) );

würde aber nicht funktionieren

input = "" + JOptionPane.showInputDialog (null, "Geben Sie eine vierstellige Zahl" + (b? "Verschlüsseln": "entschlüsseln") + "");

würde. die Methode, die drei inputdialog agruments nimmt Naht nicht in 1.3 existieren.

Dies ist nur ein langatmiges Art zu sagen, mit 1,6 api auf 1.3 Ergebnisse in dem Kopf knallte Vorfälle zu arbeiten.

Es sollte funktionieren.Ich kann mich nicht erinnern, irgendwelche Probleme damit gehabt zu haben, außer wenn Teile der Java-API veraltet sind. In diesem Fall wird ohnehin erklärt, was sie sind, und Sie können hoffentlich eine Problemumgehung schreiben.Natürlich würde das Ausführen einer mit JDK 1.6 kompilierten Klassendatei in JRE 1.5 ein Problem verursachen – selbst ein JRE, das nur geringfügige Build-Revisionen älter ist, wird einen Fehler auslösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top