一、背景
今天修改一個(gè)比較舊的代碼,jdk1.5的項(xiàng)目,所以編譯需要1.5的jdk,但是我從1.7上切會(huì)1.5的時(shí)候編譯后的代碼還是1.7的,也就是查看到二進(jìn)制碼0033,最后才發(fā)現(xiàn)是下面這里沒改造成的。順便也記載下class文件結(jié)構(gòu)
二、問題
這里的編譯級(jí)別沒有進(jìn)行修改早餐的
查看代碼的jdk版本方式,直接用文本打開class如下圖所示
jdk版本對(duì)應(yīng)的部分型號(hào)如下
34(對(duì)應(yīng)十進(jìn)制的50):JDK1.8
33(對(duì)應(yīng)十進(jìn)制的50):JDK1.7
32(對(duì)應(yīng)十進(jìn)制的50):JDK1.6
31(對(duì)應(yīng)十進(jìn)制的49):JDK1.5
idea中我電腦配置的是1.8的jdk铁材,可是編譯后的一直是1.7的效果
然后在啟動(dòng)tomcat報(bào)錯(cuò)如下:
最后在配置tomcat的頁面:
這里有個(gè)jre的選項(xiàng),本地是1.8的環(huán)境奕锌,編譯的class是1.7的著觉,但是怎么會(huì)報(bào)錯(cuò)了,高版本應(yīng)該兼容低版本的惊暴。不過把這里改成1.8的就好了
三:class文件說明
3.1 class開頭0-4
class文件的頭4歌子節(jié)稱為魔術(shù),他的唯一作用是確定這個(gè)文件是否為一個(gè)能被虛擬機(jī)接受的Class文件饼丘。使用魔數(shù)不是拓展名來進(jìn)行識(shí)別主要是基于安全方面的考慮,因?yàn)槲募耐卣姑梢噪S意地改動(dòng)辽话。
3.2 5-8位意義
5-8位是Class文件的版本號(hào)肄鸽,第5和第6字節(jié)是此版本號(hào),第7和第8字節(jié)是主版本號(hào)。
四:浩語
__
__ _ ____ __| |__ _____ ___
\ \/ \/ / | \ | \\__ \ / _ \
\ /| | / Y \/ __ \( <_> )
\/\_/ |____/|___| (____ /\____/
\/ \/
任何事情都是要靠努力和用心油啤。