【问题标题】:Java backward compatibility explanationJava向后兼容解释
【发布时间】:2013-12-03 07:23:00
【问题描述】:

我有一个 java 类文件。我用 JVM 7 编译。我实现了 java 1.7 的附加功能,如 String switchcase、diamond operator。现在我想在 java 1.6 JRE 上运行这个 .class 文件。它会运行吗?

一个使用string 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;
}

}

【问题讨论】:

  • 不,它不会运行..您如何从低版本切换到高版本,但在某些情况下无法从高版本切换到低版本。它还取决于您使用了哪些类以及它们在较低版本中是否兼容??

标签: java java-7 backwards-compatibility java-6


【解决方案1】:

Java 7 在 Strings 上的 switch 编译为 Java 6(及更早版本)JRE 执行的相同字节码。钻石算子也是如此。这些是编译器功能,而不是运行时功能。

因此,虽然我从未尝试过,但我希望如果您使用 Java 7 编译器编译使用这些功能的代码,它仍应在 Java 6 JRE 上运行。当然,如果您尝试使用 Java 6 编译器编译该代码,您将得到的只是语法错误。

如果你真的想知道试试看!

【讨论】:

  • 让我试试。不过这真的很有趣:)
  • @seenome : 你试过 java 5 吗?也试试吧。
  • 我不确定我是否同意您的回答。请参阅我的回答,它指的是oracle.com/technetwork/java/javase/…
【解决方案2】:

根据http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#binary,即使这个问题有一个公认的答案

根据 JVM 规范,Java SE 7 的类文件版本为 51,因为 JSR 292 引入了调用动态字节码。Java SE 7 编译器生成的版本 51 类文件不能在 Java SE 6 中使用。

【讨论】:

  • 感谢最终来源
【解决方案3】:

不,它不会。仅仅因为一个简单的原因,JRE7 的特性在 JRE6 上不可用。

【讨论】:

  • 既然我有它作为字节码那为什么它不会运行?它破坏了java的平台无关和字节码定义
  • jre 解释字节码,所以如果字节码包含一些 jre6 在你的情况下不理解的指令,那么就会出错。
  • 谢谢,我的面试官问了这个问题,我说不。他说它支持向后兼容。 : (
【解决方案4】:

如果你只是复制粘贴你在 1.7 上实现的代码到新的 1.6 类,它甚至不会编译,因为你使用了仅在 1.7 中引入的功能

【讨论】:

  • 请看清楚我的问题。我用 j7 编译并作为一个类 ok
  • 请看我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多