我在看《Java虚拟机原理》中有描述宗量:方法的接收者和方法的参数统称为方法的宗量。
这个宗量如何理解呢,【方法的接收者】和【方法的参数】方法的宗量
【方法的接收者】和【方法的参数】 这两个概念是什么意思呢
我在看《Java虚拟机原理》中有描述宗量:方法的接收者和方法的参数统称为方法的宗量。
这个宗量如何理解呢,【方法的接收者】和【方法的参数】方法的宗量
【方法的接收者】和【方法的参数】 这两个概念是什么意思呢
12 回答7.1k 阅读✓ 已解决
10 回答3k 阅读
5 回答1.3k 阅读
6 回答822 阅读✓ 已解决
5 回答1.6k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答754 阅读✓ 已解决
谈一下我的理解,如有不对的地方欢迎指正。宗量(argument),可以理解为自变量,在计算机科学中可能当成形式参数更好理解一些。
方法的接收者,在运行时可以理解为方法的实际执行者。
看一下下面的例子:
类方法
Book.doRead(Book)
他的接收者就是Book
这个类对象,他的参数b
是一个形式参数。意思是在方法没被调用前,b 没有具体的值,就只是一个形式而已,相当于于一个占位符。再来看方法体:b.read()
,我们可以说b.read()
一定是指向Book#read
这个方法吗?也可以不严谨的说read
的执行者b
一定是Book
对象吗?不行的,因为面向对象的多态性,父类的方法是可以被子类重写的。只有运行时,我们调用这个方法时才可以确定方法的接收者,比如Book.doRead(new Magazine())
,在运行时实际指向的是Magazine#read
。所以说方法的接收者是形式变量(宗量)。实际上这个问题要开来讲的,在运行时,方法的接收者是方法的宗量,方法的参数不是。在编译时,方法的接收者和参数才是方法的宗量,因为影响同名方法编译出来的字节码指向哪个方法的符号引用,就是方法的接收者的静态类型和方法的参数列表(重载)。
宗量,好像是指泛函中的术语,泛函是指定义域为函数的函数,在 java 中用这个术语好像可以理解。不过在这里java中讨论的更应该是值域为函数的函数。