通过“非限定”名称调用函数是什么意思?
这是Goodrich所著《Java 中的数据结构和算法》一书中的文本,在第一章中给出了使用该关键字的原因。this
允许一个构造函数体调用另一个构造函数体。当一个类的一个方法在当前实例上调用同一个类的另一个方法时,这通常是通过使用另一个方法的(非限定)名称来完成的。但是调用构造函数的语法很特殊。Java 允许将关键字 this 用作一个构造函数体内的方法,以便调用具有不同签名的另一个构造函数。
为什么它说另一种方法的名称不合格?
回答
有两种方法可以从另一个方法调用一个方法。通常,您将引用它的名称限定。如果我有一个对象foo并且它有一个方法frobnicate,我会做
foo.frobnicate();
现在,如果我已经在正确的实例中(比如说,我frobnicate从另一个方法调用foo),那么我使用特殊变量this。
this.frobnicate();
但是 Java 允许我们作为一种快捷方式,省略this并简单地调用方法名称。以下是使用非限定名称调用方法的示例:
frobnicate();
将this.是不言而喻的。
另一方面,该段落试图说明的一点是构造函数是特殊的。我们不会将构造函数称为foo.frobnicate(); 我们只是说Foo()。所以必须有特殊的语法来从另一个构造函数中调用构造函数,即this().