2013-12-03 5 views
3

У меня есть файл класса java. Я скомпилировал JVM 7. Я реализовал java 1.7 дополнения, такие как String switchcase, оператор бриллиантов. Теперь я хочу запустить этот .class файл на java 1.6 JRE. Будет ли он работать?Java обратная совместимость описание

Простая программа с помощью строки 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; 
} 

} 
+0

no it wont run..any, как вы можете переключаться с нижней на более высокую версию, но с более высокой до более низкой версии невозможно в в некотором случае. это также зависит от того, какие классы вы использовали и совместимы ли они в более низкой версии? –

ответ

3

Хотя этот вопрос имеет общепринятый ответ, согласно http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#binary

версии файла класса для Java SE 7, 51, согласно спецификации виртуальной машины Java, из-за invokedynamic байт-кода введен JSR 292. Файлы классов версии 51, созданные компилятором Java SE 7, не могут использоваться в Java SE 6.

+0

Спасибо за конечный источник – seenome

0

Нет это не будет. Просто по той простой причине, что функции JRE7 недоступны на JRE6.

+1

Так как у меня это как байтовый код, то почему он не будет работать? Он разрушает независимую от платформы платформу java и определение байт-кода – seenome

+0

jre интерпретирует байт-код, поэтому, если байт-код содержит некоторые инструкции, которые jre6 не понимает, как в вашем случае, поэтому ошибка. –

+1

Спасибо, поскольку этот вопрос задал мой интервьюер, и я сказал нет. И он так сказал, что поддерживает обратную совместимость. : ( – seenome

0

Это обыкновение даже компиляции, если вы просто даже копировать вставить код, который вы реализованная на 1,7 к новому классу 1.6, потому что вы использовали функции, которые были введены в 1.7 только

+1

, пожалуйста, см. Мой вопрос ясно. Я скомпилировал с j7 и, имея класс ok – seenome

+0

, вам нужно запустить байт-код вашего класса с помощью jre7 – saum22

+0

, пожалуйста, см. Мой вопрос. – seenome

4

Java 7-х switch на нитях компилирует к те же байт-коды, которые выполняет Java 6 (и ранее) JRE. То же самое относится к алмазному оператору. Это компилятор функции, а не время выполнения функции.

Так что, хотя я никогда не пробовал, я бы ожидал, что если вы скомпилируете код, который использует эти функции с помощью компилятора Java 7, он все равно должен работать на Java 6 JRE. Конечно, если вы попытаетесь скомпилировать этот код с помощью компилятора Java 6, все, что вы получите, это синтаксическая ошибка.

Если вы действительно хотите узнать, попробуйте и убедитесь!

+0

Позвольте мне попробовать. И это было действительно интересно:) – seenome

+1

@seenome: вы пытались использовать java 5? Попробуйте это тоже. –

+0

нет У меня только 6 и 7 – seenome

Смежные вопросы