开发完成后,测试过程中,有时候会报一些莫名的异常。一般都会是:java.lang.NoClassDefFoundError、或者带有
java.lang.ClassNotFoundException。但检查发现我们需要引入的jar包确实存在,而import的类也确实存在。
根据我之前遇到的一种情况是:由于引入的第三方jar包的版本,自身是采用较高的jdk版本编译的(比如:jdk6.0),而当前
项目采用的是较低版本的jdk。为了确定import的类编译的jdk版本,可采用以下方法:
编写类:ClassVersionChecker
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
/**
*
* http://www.rgagnon.com/javadetails/java-0544.html The first 4 bytes are a
* magic number, 0xCAFEBABe, to identify a valid class file then the next 2
* bytes identify the class format version (major and minor).
*
* Possible major/minor value :
*
* major minor Java platform version
*
* 45 3 1.0
*
* 45 3 1.1
*
* 46 0 1.2
*
* 47 0 1.3
*
* 48 0 1.4
*
* 49 0 1.5
*
* 50 0 1.6
*
*
* @author Administrator
*
*/
public class ClassVersionChecker {
public static void main(String[] args) throws IOException {
for (int i = 0; i < args.length; i++)
checkClassVersion(args[i]);
}
private static void checkClassVersion(String filename) throws IOException {
DataInputStream in = new DataInputStream(new FileInputStream(filename));
int magic = in.readInt();
if (magic != 0xcafebabe) {
System.out.println(filename + " is not a valid class!");
}
int minor = in.readUnsignedShort();
int major = in.readUnsignedShort();
System.out.println(filename + ": " + major + " . " + minor);
in.close();
}
}
配置args,运行main方法,可以得到该类的major和minor,参照代码注释中的表进行比对,得出编译的jdk版本。
如配置一个args[0]为:E:\workspace\whatisjava\bin\VariableBinding.class(snmp4j.jar中的一个class文件)
运行后结果为:E:\workspace\whatisjava\bin\VariableBinding.class: 48 . 0
即该类为jdk1.4编译。
参考:http://www.rgagnon.com/javadetails/java-0544.html
分享到:
相关推荐
jdk1.8编译类文件反编译工具。使用方式:java -jar procyon-decompiler-0.5.30.jar ***.class -o c:\**
class识别jdk版本 jdk版本 class识别jdk版本 jdk版本
jdk反编译工具jdk反编译工具jdk反编译工具jdk反编译工具jdk反编译工具jdk反编译工具
java jdk 反编译 将class文件反编译成java文件 不用安装 直接使用小程序 即可将.class文件反编译成.java文件
用于反编译class文件,直接打开里面的exe文件运行打开class文件即可实现反编译。
支持jdk1.2 jdk1.3 jdk1.4 jdk1.5 jdk1.6 支持目录对目录 支持直接双击class文件看源代码
因本人使用的JDK1.8,测试可用,高版本JDK暂未测试。 使用步骤:beyond compare的菜单--工具(tools)--- 导入设置(import ...将jar包或class文件拖放对比的时候,在对比窗口上选择编译方式为Java Class to source。
jad class文件的反编译软件
Mac 版本 jdk 11 Mac 版本 jdk 11 Mac 版本 jdk 11Mac 版本 jdk 11 Mac 版本 jdk 11 Mac 版本 jdk 11Mac 版本 jdk 11 Mac 版本 jdk 11 Mac 版本 jdk 11Mac 版本 jdk 11 Mac 版本 jdk 11 Mac 版本 jdk 11Mac 版本 jdk...
kettle jar包, jdk7版本和jdk8版本 kettle jar包, jdk7版本和jdk8版本
java jdk1.7源码包,用于centos7使用jdk1.7编译openjdk1.8的 1.7版本
java反编译工具,方便查看class文件,
非常好用的反编译工具jd-gui,反编译工具支持jdk1.7及以下反编译,反编译工具支持jdk1.7及以下反编译
jdk1.8版本免安装
MAT MemoryAnalyzer JDK8版本,亲测有用~!
此版本是基于jdk1.8进行编译。可在相应的环境下运行。 opencv4.8.0人脸识别的类库,在windows 10 下 vs2022的cmaker编译。原生的opencv4.8.0是基于jdk11编译的。此版本是基于jdk1.8进行编译。可在相应的环境下运行。...
jdk8文件【版本号jdk1.8.0_151】
dubbo-Admin JDK8编译 可以直接运行 JDK8+TOMCAT7 欢迎各位老板下载
对于想了解JDK源码的朋友来说,通过调试JDK源码来...要达到这个目的,一是找网上人家已经编译好的版本;二是自己去编译jdk源码,如何自己编译可以参看我的博客:http://blog.csdn.net/ftp_2014/article/details/51087603
java文件 用于 测试jdk版本。使用提示,利用DOS命令操作。