使用/不使用此关键字调用方法之间有什么区别

时间:2018-10-18 07:32:03

标签: java oop this


我有一个问题。 请不要将其标记为重复项,只需回答一次即可。我找不到针对此特定情况/条件的答案,如果您认为它具有特定的答案,则仅标记为重复。将其标记为重复使我的问题仍然是没有答案的问题。

使用/不使用 this 作为关键字来调用方法之间有什么区别?哪个更好?
该问题专门针对单个班级。

请查看下面的示例代码以完全理解该问题。

public class ThisSample {
public static void main(String[] args) {
    ThisSample sample = new ThisSample();
    sample.methodOne();
}
public void methodOne() {
    System.out.println("Method 1 called");
    this.methodTwo();          //Line 1
    methodTwo();               // Line 2
}
public void methodTwo() {
    System.out.println("Method 2 called");
}
}

代码中的两行(第一行和第二行)有什么区别(优点/缺点/含义)?

感谢与问候, 亚德文德拉

3 个答案:

答案 0 :(得分:0)

“此”任务是将对象属性与方法参数区分开。在呈现的代码中,的用法无效。但是,最常见的用法类似于以下示例:

public class Service {

    private ServiceA serviceA;
    private ServiceB serviceB;

    // Here 'this' is used to make sure that class instance 
    // properties are filled with constructor parameters

    public Service(ServiceA serviceA, ServiceB serviceB) {
       this.serviceA = serviceA;
       this.serviceB = serviceB;
    }

}

答案 1 :(得分:0)

this用于指定您正在谈论类 ThisSample 的当前实例中的方法 methodTwo

如果您还有另一个名为AnotherSample的课程:

public class AnotherSample{
    public static void methodThree()
    {
        // some code
    }
}

您可以按照以下说明AnotherSample.methodThree();来使用方法 methodThree

总而言之:this仅指定您使用的是当前正在编码的类的实例。

答案 2 :(得分:0)

在本例中,您已经给出了什么区别。让我稍微修改一下您的代码:

public class ThisSample {
    int variable;
    public static void main(String[] args) {
        ThisSample sample = new ThisSample();
        sample.methodOne(3);
        sample.methodTwo(5);
    }
    public void methodOne(int variable) {
        this.variable = variable;
        System.out.println("variable is: " + this.variable);
    }
    public void methodTwo(int variable) {
        variable = variable;
        System.out.println("variable is: " + this.variable);
    }
}

在这里,对于方法2,必须使用this.variable在实例变量中设置值。否则,这两种方法都将在此处打印3。第二种方法也是打印三种,因为您在方法一中设置了3。

现在在方法2中,

  

variable =变量

line,两个变量都是方法2的参数。但是当您编写时,

  

this.variable =变量;

您正在说的是,左边的是 this 对象的实例变量,右边的部分是 this 对象的实例变量。

编辑:

如果您想知道“哪个更受欢迎”,那么也请参见此链接。这里所说的“冗余”。链接为:https://softwareengineering.stackexchange.com/a/113434/162116

这里,也有人说,如果我确实需要这样做来推断实例变量,则应该重构代码。