簡體   English   中英

Java向后兼容性說明

[英]Java backward compatibility explanation

我有一個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;
}

}

Java 7在字符串上的switch編譯為Java 6(及更早版本)JRE執行的相同字節碼。 鑽石操作員也是如此。 這些是編譯器功能,而不是運行時功能。

因此,雖然我從未嘗試過,但我希望如果使用Java 7編譯器編譯使用這些功能的代碼,它仍然應該在Java 6 JRE上運行。 當然,如果您嘗試使用Java 6編譯器編譯該代碼,那么您將獲得的只是語法錯誤。

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

根據http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#binary ,即使這個問題有一個公認的答案,

由於JSR 292引入的invokedynamic字節代碼,Java SE 7的類文件版本為51,因為Java SE 7編譯器生成的版本51類文件不能在Java SE 6中使用。

不,不會。 僅僅因為JRE7上沒有JRE7功能的簡單原因。

如果您只是將您在1.7上實現的代碼粘貼到1.6的新類,它甚至不會編譯,因為您使用的是僅在1.7中引入的功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM