Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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_Java 7_Backwards Compatibility_Java 6 - Fatal编程技术网

Java向后兼容性说明

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

我有一个java类文件。我用JVM7编译。我实现了Java1.7的附加功能,比如字符串开关盒、菱形操作符。现在我想在Java1.6JRE上运行这个.class文件。它会跑吗

一个简单的程序使用字符串switchcase作为我卸载6。请试一试并给我答案

  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吗?也试试看。我不确定我是否同意你的答案。请看我的答案,其中提到了对最终来源的感谢