Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java和;“向前”;相容性问题_Java_Compatibility_Bytecode - Fatal编程技术网

Java和;“向前”;相容性问题

Java和;“向前”;相容性问题,java,compatibility,bytecode,Java,Compatibility,Bytecode,我已经用java版本1.6使用参数-source 1.5和-target 1.5编译了我的源代码,编译器一点也不抱怨 但是,由于缺少方法,应用程序无法使用Java1.5运行。当然,我可以重写一些源代码,使之符合1.5标准,但我不明白的是;底部的java字节码不应该“向前”兼容吗 这些方法不是转换成字节码吗?是否可以将1.6 libs/方法(formely String.isEmpty())编译为1.5字节码并将其全部打包到归档文件中?我认为java不会向后重新编译本机java代码。因此,如果您进

我已经用java版本1.6使用参数-source 1.5和-target 1.5编译了我的源代码,编译器一点也不抱怨

但是,由于缺少方法,应用程序无法使用Java1.5运行。当然,我可以重写一些源代码,使之符合1.5标准,但我不明白的是;底部的java字节码不应该“向前”兼容吗


这些方法不是转换成字节码吗?是否可以将1.6 libs/方法(formely String.isEmpty())编译为1.5字节码并将其全部打包到归档文件中?

我认为java不会向后重新编译本机java代码。因此,如果您进行1.6调用,您将无法在1.5中访问它,我不相信java会向后重新编译本机java代码。因此,如果您进行1.6调用—您将无法在1.5中访问它—如果您指的是基本Java库方法,那么不,这些方法在编译时不会转换为字节码;它们已经被Sun(或第三方JVM发行商)编译成字节码并安装在您的操作系统上。它们被编译的代码引用和使用

如果您指的是基本Java库方法,那么不,这些方法在编译时不会转换为字节码;它们已经被Sun(或第三方JVM发行商)编译成字节码并安装在您的操作系统上。它们被编译的代码引用和使用

您可以将正在编译的库更改为旧库。在像eclipse这样的包中,每个安装的JDK都应该出现在一个“选择库”窗口中,您可以选择要编译的库

如果没有,您应该能够在ant文件或CLI compile命令中覆盖它


如果目标是较旧的JVM,则必须执行此操作,否则您可能会使用不可用的调用。

您可以将正在编译的库更改为较旧的库。在像eclipse这样的包中,每个安装的JDK都应该出现在一个“选择库”窗口中,您可以选择要编译的库

如果没有,您应该能够在ant文件或CLI compile命令中覆盖它


如果目标是较旧的JVM,则必须执行此操作,否则您可能会使用不可用的调用。

您需要的全套命令行选项包括:

java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar
(将bootclasspath更改为机器的设置方式。)


当然,1.6中的API增强不会出现在1.5中。1.5大部分是通过它的生命周期结束的,所以你可能想考虑1.6的最小值无论如何。

< P>你需要的全套命令行选项是:

java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar
(将bootclasspath更改为机器的设置方式。)


当然,1.6中的API增强不会出现在1.5中。1.5大部分是通过其生命周期结束的,因此您可能需要考虑1.6的最小值。

< P>源参数只允许编译器以语言语法级别检查(源=1.4,例如如果遇到泛型就抱怨)。但不会限制您仅使用指定Java版本中可用的API


目标参数将使编译器输出类文件,这些文件可由指定版本的运行时使用,但不会(与-source一样)验证任何API一致性。

源参数仅在语言语法级别进行编译器检查(例如,如果遇到泛型,source=1.4会抱怨)但不会限制您仅使用指定Java版本中可用的API


目标参数将使编译器输出类文件,这些文件可由指定版本的运行时使用,但不会(与-source一样)验证任何API一致性。

如果运行的JRE为1.6,这完全取决于哪个JRE在运行您的代码--它提供了库。如果您运行的JRE是1.6,那么这完全取决于哪个JRE在运行您的代码--它提供了库。唯一的问题是Mac OSX,它说自己是唯一一个完全集成java的操作系统,不支持1.6:/1.6当然适用于Mac OS X。我相信他们现在甚至有了6u10插件的版本。不幸的是,我认为他们还没有做到的是,在所有受支持的Mac OS X版本中,默认情况下都是1.6。我认为它只在64位版本中可用。唯一的问题是,Mac OSX,它本身就是唯一一个完全集成java的操作系统,不支持1.6:/1.6当然适用于Mac OS X。我相信他们现在甚至有了6u10插件的版本。不幸的是,我认为他们还没有在所有受支持的Mac OS X版本中默认使用1.6。我认为它只在64位版本中可用