Java向后兼容性说明
我有一个java类文件。我用JVM7编译。我实现了Java1.7的附加功能,比如字符串开关盒、菱形操作符。现在我想在Java1.6JRE上运行这个.class文件。它会跑吗 一个简单的程序使用字符串switchcase作为我卸载6。请试一试并给我答案Java向后兼容性说明,java,java-7,backwards-compatibility,java-6,Java,Java 7,Backwards Compatibility,Java 6,我有一个java类文件。我用JVM7编译。我实现了Java1.7的附加功能,比如字符串开关盒、菱形操作符。现在我想在Java1.6JRE上运行这个.class文件。它会跑吗 一个简单的程序使用字符串switchcase作为我卸载6。请试一试并给我答案 import java.util.Scanner; public class Classing { public static void main(String[] args) { System.out.printl
import java.util.Scanner;
public class Classing
{
public static void main(String[] args)
{
System.out.println("Enter a month to know who you are");
System.out.println("Jan \n Feb \n Mar \n Apr");
Scanner scan=new Scanner(System.in);
String name=scan.nextLine();
System.out.println(fortune(name.toLowerCase()));
}
public static String fortune(String s)
{
switch(s)
{
case "jan":
return "Good guy";
case "feb":
return "Nice guy";
case "mar":
return "Brave guy";
case "apr":
return "Super guy";
}
return " Month out of option"+s;
}
}
不,不会的。原因很简单,JRE7功能在JRE6上不可用 如果您只是将在1.7上实现的代码复制粘贴到新的1.6类中,它甚至不会编译,因为您使用了仅在1.7中引入的特性Java 7的
开关
对字符串进行编译,并将其编译为与Java 6(及更早版本)JRE执行的字节码相同的字节码。菱形操作符也是如此。这些是编译器功能,而不是运行时功能
因此,尽管我从未尝试过,但我希望如果您使用Java7编译器编译使用这些特性的代码,它仍然应该在Java6JRE上运行。当然,如果您尝试使用Java6编译器编译该代码,您将得到的只是语法错误
如果你真的想知道,试试看 即使这个问题有一个公认的答案,根据 根据JVM规范,JavaSE7的类文件版本是51,因为JSR292引入了invokedynamic字节码。Java SE 7编译器生成的51版类文件不能在Java SE 6中使用
不,它不会运行。任何您可以从较低版本切换到较高版本,但从较高版本切换到较低版本的方法在某些情况下都是不可能的。这还取决于您使用的类以及它们在较低版本中是否兼容??既然我将其作为字节码,那么为什么它不会运行?它破坏了java的平台无关性和字节码定义,JRE解释字节码,因此,如果字节码包含一些jre6无法理解的指令,那么就错了。谢谢,因为我的采访者问了这个问题,我说没有。他说它支持向后兼容(请看清楚我的问题。我是用j7编译的,并且有一个类OK。亲爱的,请看我的问题。让我试试。这真的很有趣:)@seenome:你试过java 5吗?也试试看。我不确定我是否同意你的答案。请看我的答案,其中提到了对最终来源的感谢