Java向后兼容性说明

时间:2013-12-03 07:23:00

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

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

使用字符串开关的简单程序当我卸载时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;
}

}

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

根据http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#binary

,即使这个问题有一个可接受的答案
  

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

答案 2 :(得分:0)

不,不会。仅仅因为JRE7上没有JRE7功能的简单原因。

答案 3 :(得分:0)

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