一:寫個demo
?
二:點擊Recompile編譯
?
三:使用javap命令反編譯class文件 ? ? ???javap -v 類名.class
?
四:查看結果
?
?
五:分析執行過程
首先bipush意思是把byte類型的變量i的值15存放到操作數棧中,istore_1的意思是把操作數棧中int類型的i的值取出來存放到局部變量表中索引為1的位置,為什么一開始就從索引1開始存的,因為這個方法不是靜態方法,局部變量表的索引0位置存放了this,接著操作數棧就沒有了,i出棧了,接著bipush 8的意思是把8放到操作數為索引0的位置上,接著istore_2的意思是把操作數棧中的8存放到局部變量表索引為2的位置上,iload_1和iload_2指令的意思是把局部變量表中索引為1和2位置的數據依次取出來,放到操作數棧中,接下來進行iadd操作,接著出棧,這個字節碼指令被執行引擎翻譯成機器指令,然后被cpu執行,由cpu運算,把8和15相加的和23,接著23放到了操作數棧中,istore_3意思是把23以int類型存儲到局部變量表中索引為3的位置上,最后因為方法沒有其他操作,沒有返回值,最后return結束
(byte,short,char,boolean 都以int型來保存)