原标题:大话+图说:Java 字节码指令——只为让你懂
前言
随着Android开发技术不断被推到新的高度,对于Android程序员来讲越来越需要具备一些对深入的基础性的技术的理解,比如说Java汇编指令。不然,可能很难深入理解一些时下的新框架、新技术,盲目一味追新也会越来越感乏力。
本文既不求照本宣科,亦不求炫技或著文立说,仅力图以最简明、最形象生动的方式,结合例子与实战,让小白也能搞懂这门看似复杂的技术概念。
单刀直入
闲言碎语不要讲,先表一表,什么是Java汇编指令?简而言之,Java汇编指令就是Java虚拟机能够听得懂、可执行的指令,也可以说是Java代码的最小执行单元。
有点Java基础的人一定都知道,javac命令会将Java源文件编译成字节码文件,也就是.class文件,里面就包含了大量的汇编指令。因此可以将javac命令理解为一个翻译命令,将源文件翻译成虚拟机可以执行的指令。
那么最直观的探究方法莫过于直接对比一下翻译前后的内容。
具体如何对比呢?就不得不用到Java为我们一直默默提供的一项利器,javap命令,它可以解析字节码,将字节码内部逻辑以可读的方式呈现出来。为了紧贴实战,我们直接在新建的Android工程里,写这样一个Activity类,里面包含几个由简单到复杂的方法和一个名为name的字段:
如图,以上方法,复杂度由低到高依次为:getName
下面我们编译工程,然后在下图所示的目录找到该类的字节码文件:
cd到这个路径下,运行万能的javap命令:javap -v -p MainActivity,就可以观看到翻译版的Java字节码的胴体了!这里的-v意思是啰嗦模式,会输出全面的字节码信息,而-p是指涵盖所有成员。原字节码信息输出内容较多,基于本文的目标,取其一方法的内容,整理如下图:
方法 1: getName()
这个getName的方法应该是再简单不过的Java代码,翻译成