jdk7.0与jdk5.0兼不兼容?

1.eclipse使用jdk7.0和5.0编译打包后的程序,兼不兼容?换句话说,把jdk7.0编译的代码上传到服务器(服务器上的是jdk5.0)之后,会不会出什么问题?

2.类似这方面的详细资料,去哪儿找呢?

用jdk7开发,但是用jdk5编译,如果不用到jdk7的新特性新api就能在jdk5 jdk7上运行
用jdk7开发,用jdk7编译,不能用jdk5运行
用jdk5开发,可以用jdk7编译,如果用了一些些jdk5的api在jdk7没有了就不能编译了,编译了只能在jdk7运行
用jdk5开发,用jdk5编译,可以在jdk5 jdk7上运行

这个JDK7编译完的,放到只安装JDK5的机器上是不能跑的,因为编译完的class文件版本号是51,只能在JDK7上跑,除非在编译的时候就指定了-target 指定使用1.5

问题1:可以看一些比较深入的JAVA书,像深入JAVA虚拟机,或JAVA深度历险。。。
一般编译完的class文件,可以通过javap -verbose 命令,查看详细需要的JAVA版本,major为主版本,即具体是1.5,还是1.6。。。
问题2:这个应该是相当于语法层面的支持,如果你选择的是5.0的,那本一些7.0的新特性在IDE里直接就报错了,提示不支持,而不是需要等到编译阶段。

jdk向上兼容,不向下兼容.

比如jdk7打包的程序,在jdk5运行是很有可能出问题的.

如果jdk5打包的,扔jdk7一般是没问题.

1.很有可能会出问题,

2.不知道

我弄过测试,我的项目在jdk1.6下maven打包后,放到1.7下的服务器运行,有问题会发生.

但如果1.7编译后放到1.6服务器下无问题.

并非仅仅是只使用1.5的语法特性就能兼容的。

需要注意几个问题,

  1. JDK7和JDK5 会有java基本类型的差异,方法或者属性。 比如一些annotation就不一样。
  2. 二进制文件里有版本标示,在运行时会校验。 因此需要指定编译后的 class的版本。 maven和ant都有相关选项。 javac 的-source 和 -target选项也是与此相关

在eclipse里选择jdk有两个意义,一是确定语法检查时使用哪个版本的。
二就是确定输出的class的版本。

[i]1.只要不用到jdk7.0的新特性,就没什么影响;————有没有更详细一点的文章介绍?[/i]
比如 List strs = new ArrayList<>(); 这个在1.7上编译是没有问题的,但是1.5是不行的。 具体的说:
1.7新引入的语法,在JDK1.5上肯定是不能通过的(每个版本的特性谷歌一下到处都是)
[i]2.eclipse有内置的编译器,不管设置为7.0还是5.0,都没有影响————这个不是很懂,既然都一样的话,那eclipse为什么还要弄个东西来设置jdk的版本? [/i]
Eclipse由于要做开发环境,各种原因导致其并不是使用JDK的JavaC来实现编译的,而是自己内置的编译器。

.class上面会有一个版本信息,如果是低版本(如5.0)遇到高版本编译的结果(如7.0),会报告异常,不管你有没有使用到高版本的功能,解决的方法是在JavaC的时候,将target版本设置成5.0.

.由于JDK每个版本都会增加一些功能,比如7.0的ForkAndJoin,这些功能在低版本的JDK里面是无法运行的,这个应该比较容易理解。