java代码编译版本号 Java 版本

怎么知道Java class文件JDK编译的版本号

首先用一些二进制查看器打开class文件,比如od或者hexdump工具。

胶州网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联建站于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

od -x hello.class

或者

hexdump hello.class

我们会看到类似于下面的输出:

feca beba 0000 3300

这里我们看到前四个字节是Java class的特殊符号,叫做magic字段,用来告诉JVM这是个class文件,之后的两个字节是minor版本号,再之后的两个字节是major版本号,我们看到时33,对应下表我们知道33时JDK1.7编译的版本号。

十六进制

JDK1.5 31

JDK1.6 32

JDK1.7 33

JDK8 34

因为Java是向后兼容的,所以高版本的兼容低版本的,所以有时候你遇到java报: unsupported major.minor version 51,那就是你用低版本的虚拟机去运行高版本JDK编译的class文件了,所以低版本的虚拟机就抱怨了。这里的51是十进制,也就是十六进制的33,及对应JDK1.7,如果出现这种错误,你肯定是使用低于1.7版本的虚拟机去运行这个了。

Java如何生成版本号?比如0001 0002 0002

首先还是不太明白你说的这个“生成版本号”是什么意思,如果只是生成一个自增序列的话

1、如果有oracle数据库的话可以利用它的序列生成。

2、没有oracle,用redis也行。

3、没有数据库,那就写个文件来存取吧:

public class Test2 {

public static void main(String[] args) throws IOException {

System.out.println(getSequence("d:\\test\\sequence.txt"));

setSequence("d:\\test\\sequence.txt", "");

System.out.println(getSequence("d:\\test\\sequence.txt"));

}

//读取序列

public static String getSequence(String sequenceFile) throws IOException {

FileInputStream fileInputStream = null;

InputStreamReader inputStreamReader = null;

BufferedReader bufferedReader = null;

try {

File file = new File(sequenceFile);

fileInputStream = new FileInputStream(file);

inputStreamReader = new InputStreamReader(fileInputStream);

bufferedReader = new BufferedReader(inputStreamReader);

// 按行读取字符串

String str;

if ((str = bufferedReader.readLine()) != null) {

return str;

}

return null;

} catch (Exception e) {

e.printStackTrace();

return null;

} finally {

if (bufferedReader != null) {

bufferedReader.close();

}

if (inputStreamReader != null) {

inputStreamReader.close();

}

if (fileInputStream != null) {

fileInputStream.close();

}

}

}

//设置序列,如果传入的序列号为空,则在原序列的基础上+1

public static void setSequence(String sequenceFile, String sequence) throws IOException {

if (sequence == null || sequence.isEmpty()) {

String oriSequence = getSequence(sequenceFile);

Objects.requireNonNull(oriSequence);

sequence = String.format("%04d", Integer.valueOf(oriSequence) + 1);

}

FileOutputStream fileOutputStream = null;

OutputStreamWriter outputStreamWriter = null;

BufferedWriter bufferedWriter = null;

try {

File file = new File(sequenceFile);

fileOutputStream = new FileOutputStream(file);

outputStreamWriter = new OutputStreamWriter(fileOutputStream);

bufferedWriter = new BufferedWriter(outputStreamWriter);

bufferedWriter.write(sequence);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (bufferedWriter != null) {

bufferedWriter.close();

}

if (outputStreamWriter != null) {

outputStreamWriter.close();

}

if (fileOutputStream != null) {

fileOutputStream.close();

}

}

}

}

代码又挤在一起了:

读序列:

写序列:

运行结果:

先生成好这个文件:

冲!:

如何判断java类的编译版本

使用javap反编译class文件,命令为

javap -c -verbose class文件名

生成的文件中可以看到这么两句:

minor version: 0

major version: 52

52便代表了是使用JDK8编译出来的,JDK7是51,JDK6是50,以此类推


网页名称:java代码编译版本号 Java 版本
本文URL:http://hbruida.cn/article/doceeps.html