[英]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.