为什么在静态方法中不能使用this

2020-10-24  本文已影响0人  赵信信官属

看到这个标题的读者,在你们的心里多多少少都有自己的答案,下面说一下我的答案.

在JVM的运行时数据区中有个虚拟机栈(或Java栈),在它的里面是由栈帧'叠加'而成.
栈帧由局部变量表,操作数栈,动态连接,方法返回地址等组成.
那么我们就从局部变量表角度解答下这个问题.

我这里安装了jclasslib Bytecode viewer插件,方便查看字节码.

image.png
public static void query(String year) {
     int month = 12;
     String address = "Jiangsu";

     System.out.println(address);
 }

 public void shadow(String year) {
     int month = 12;
     String address = "Jiangsu";

     System.out.println(address);
 }

执行编译

image.png

查看字节码


image.png image.png

详细看下两个方法的局部变量表,如下

query方法的局部变量表


image.png

shadow方法的局部变量表


image.png

我们发现,非静态方法shadow的局部变量表中有this,而在静态方法query的局部变量表中没有this. 因此也就解答了文章开头提出的问题.​

上一篇 下一篇

猜你喜欢

热点阅读