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