探索java隐式参数

2019-01-25  本文已影响98人  王小杰at2019

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);

    }
}

上一篇下一篇

猜你喜欢

热点阅读