在JVM的运行时数据区中有个虚拟机栈(或Java栈),在它的里面是由栈帧'叠加'而成.栈帧由局部变量表,操作数栈,动态连接,方法返回地址等组成.
那么我们就从局部变量表角度解答下这个问题....详细看下两个方法的局部变量表
query方法的局部变量表,如下
shadow方法的局部变量表,如下
我们发现,非静态方法shadow的局部变量表中有this,而在静态方法query的局部变量表中没有...在普通方法中,在它的局部变量表中的第一个槽存放了this, 而静态方法的局部变量表中没有存放this.