美文网首页
为什么在静态方法中不能使用this

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

作者: 书唐瑞 | 来源:发表于2020-10-24 18:53 被阅读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. 因此也就解答了文章开头提出的问题.​

    相关文章

      网友评论

          本文标题:为什么在静态方法中不能使用this

          本文链接:https://www.haomeiwen.com/subject/kklwmktx.html