Java 中关于Version Number的一点总结

来源:互联网 发布:淘宝天使心写真集原版 编辑:程序博客网 时间:2024/06/08 09:33
 
Java 中关于Version Number的一点总结
 
 
1.         Bad version number in .class file 问题及解决方案:
首先明确:低版本的第三方jar可以被高版本的Application所接受。但高版本的Jar很可能不被低版本的Application接受。
 
所以,我们compiler一定要尽量低,我们运行的jre一定要高。至少要使得compiler一定要比Jre低,否则就会出现上述的错误。
 
如果你熟悉Eclipse 你应该就知道怎么改了,或者,从Google上找到具体做法
 
2.         关于Jad 反编译出现的问题(The class file version is 48.0 (only 45.3 and 46.0 are supported))
今天用Jad出现了一个class文件版本过高不能编译的问题,后来采用了一个新的Jad,可以编译1.5以后版本的class, Jad1.5.8g.
相当有意思的事情:由于Jad1.5.7不能反编译1.5版本以上的class(只能编译1.2!),有人采用了这样的方式更改class文件:修改第八个字节。这个应该是版本信息所在的位置。后来用urltraEdit编译后发现果然如此。第八个字节有2E和30的区别。
这个工具非常好用。
进一步研究发现:发现了一个问题:
Javac –source 1.5 –target 1.4这样是行不通的。
但是Java –source 1.3 –target 1.2却可以搞定。
所以版本的问题实在是复杂。
总结如下:
a.   1.4,1.5,1.6版本的源文件可以编译成比他高的版本。
b.     1.3,1.2版本的源文件可以编译成任何版本。高低不限。
可见,分水岭产生在1.4,也说明了1.4产生了重大的改变。
另外一个很有意思的事情是,如果不带-source这个选项,默认源文件的版本是1.5.也就是说,只可能编译成1.6或者1.5版本的class,这个问题没有再继续研究下去了,如果知道这些版本之间编译的差别究竟是怎么造成了,请回复。
 
原创粉丝点击