Kurze Frage: Wenn ich relativ "kleine" Java 7 Sprachfeatures verwende, die vorher in Java 6 nicht verfügbar waren, wie der try-muticatch Block ... bedeutet dies, dass mein Programm nicht auf Computern läuft mit JRE 6 oder JRE 5 nach der Kompilierung installiert? Wenn das korrekt ist, gibt es eine schnelle Möglichkeit, eine ausführbare JRE6-JAR-Datei zu erstellen, ohne einen Java 7-Quellcode zu ändern (was übrigens das einzige Java 7-Feature ist, das es verwenden würde, ist der Try-Multicatch-Block)?Java 7 Sprache Rückwärtskompatibilität
Antwort
Sie haben Recht. Multi-Catch ist ein Java 7-Sprachfeature und es gibt keine Möglichkeit, es zu Java 6 (oder früherem) JVM-kompatiblem Bytecode zu kompilieren.
eine Java-7-Compiler ermöglicht die folgenden Java 6 kompatibel Bytecode kompiliert:
javac -source 1.6 -target 1.6 MyJavaFile.java
Wenn Sie (zB Multi-catch,) eine Java-7-Sprache-Funktion zu kompilieren versuchen, werden Sie erhalten:
roach$ javac -source 1.6 -target 1.6 test.java
warning: [options] bootstrap class path not set in conjunction with -source 1.6
test.java:9: error: multi-catch statement is not supported in -source 1.6
} catch (NullPointerException | BufferOverflowException ex) {}
^
(use -source 7 or higher to enable multi-catch statement)
1 error
1 warning
(weitere Informationen über das, was die warning
Mittel, siehe: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source - es ist nicht relavent zu dieser Diskussion)
Wenn Sie die -source
Flagge 1.7
ändern erhalten Sie:
source release 1.7 requires target release 1.7
Weil ... Sie Java 7 Quelle nicht kompilieren können (z Quelle, die Java 7-Funktionen hat) mit Java 6 kompatiblem Bytecode.
Wenn Sie es mit Java 7 kompilieren (ohne -source
oder -target
Flag), erhalten Sie Java 7 Bytecode, der nicht auf einer Java 7 JVM < ausgeführt werden kann. Und wenn Sie dies versuchen, erhalten Sie eine Fehlermeldung, dass die Versionen nicht übereinstimmen:
roach$ /Library/Java/Home/bin/java net.mostlyharmless.multicatch.App
Exception in thread "main" java.lang.UnsupportedClassVersionError: net/mostlyharmless/multicatch/App : Unsupported major.minor version 51.0
Sie kann nicht Quelle kompilieren mit Java 7-Funktionen in Java 6 .class- weil diese
javac -source 1.7 -target 1.6 Test.java
source release 1.7 requires target release 1.7
Fehler produziert. Dies liegt daran, dass einige der Features von 1.7 nur mit Java 7-Klassen funktionieren können. ZB try-with-resources
verwendet Throwable.addSuppressed
Methode nur verfügbar seit 1.7
- 1. Hat die Java-Sprache während des gesamten Verlaufs die Rückwärtskompatibilität des Quellcodes aufrechterhalten?
- 2. OpenGL Rückwärtskompatibilität
- 3. Datacontract Rückwärtskompatibilität der Serialisierung
- 4. MS Office PIAs "Rückwärtskompatibilität"
- 5. Broken Rückwärtskompatibilität in System.Web.Http
- 6. Swagger Codegen Rückwärtskompatibilität
- 7. Java-Sprache Importbefehl Nutzung
- 8. IExtensibleDataObject erreicht Vorwärts- und Rückwärtskompatibilität
- 9. Vorwärts- oder Rückwärtskompatibilität in Android?
- 10. Java-Streams in Java 7
- 11. java user.home in der lokalen Sprache zurückzukehren
- 12. Erstellen einer benutzerdefinierten Sprache Highlight in Komodo Bearbeiten 7
- 13. OS Sprache in Java bekommen
- 14. Verschlüsse in Java 7
- 15. AbschlussresultSet in Java 7
- 16. Java-Sprache Spezifikation: Bedeutung der Notation | S |
- 17. Windows API Codepack Rückwärtskompatibilität auf Windows XP
- 18. DISPATCH_TIME_NOW in Swift 3 und Rückwärtskompatibilität
- 19. Update-Storyboard auf iOS 6 mit Rückwärtskompatibilität
- 20. Java 8 Leistung VS. Java 7
- 21. Java 7 ATOMIC_MOVE gibt Ausnahmen
- 22. AspectJ arbeitet mit Java 7?
- 23. Java 7: Fork/Join-Framework
- 24. Java 7 String - Teilstring Komplexität
- 25. Binär-Java 7 für Mac
- 26. Java 7 Datum/Zeit API
- 27. Eclipse 3.5 und Java 7
- 28. Java Project Administratorrechte Fenster 7
- 29. Unterstützt Tomcat 7 Java 8?
- 30. Java 7 in Eclipse programmieren