探索java隐式参数

jclasslib字节码查看器是一个可视化编译的Java类文件和包含的字节码的所有方面的工具。此外,它还包含一个库,使开发人员能够读写Java类文件和字节码。


  1. 安装jclasslib 插件,idea 安装参考下图,https://github.com/ingokegel/jclasslib/releases 下载对应的版本即可
image.png
  1. 使用 jclasslib查看字节码信息


    image.png
  2. 查看本地方法变量表


    image.png

    通过jclasslib看到方法method1 在我们编写的时候只有一个变量a,在本地变量中增加了一个this,
    那么我们手动在方法中增加该参数看是否能够正确执行


    image.png

我们可以看到编译通过并能够正确执行, 这个现象说明Java在第一个参数this可以省略,如果省略在jdk编译的时候会自动加上,手动指定也不会报错,但是第一个参数名字必须是this

因为这里调用的是一个虚方法,按照Java语言的规则,方法第一个参数是隐式的,代表该方法的接收者,也即是this指向的对象,这个参数以前是放在参数列表中进行传递的



import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Example1 {
    private int age = 10;

    /**
     * jdk 会把当前调用的的实例,作为第一个参数传入进去,参数名叫this
     * 这个叫隐式参数
     */
    public void method1(Example1 this, int a) {
        log.info("a:{}", a);
        log.info("age:{}", this.age);
    }

    public static void main(String[] args) {
        Example1 example1 = new Example1();
        example1.method1(1);

    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容