1

我见过许多实现,其中有一个类 ( C1),而在这个类中是一个私有方法 ( M1)。我见过使用this.M1或简单地M1从这个类的其他方法中使用这个方法M1

public class C1{
    private void M1(){
        // do something...
    }

    public void M2(){
        this.M1();
        //OR calling as
        M1();
    }

    private void M3(){
        this.M1();
        //OR calling as
        M1();
    }
}

什么是正确的方法?

有什么区别?


编辑

这与“当多个线程尝试访问同一个方法时”有什么关系?

public class SingletonClass {

    private static SingletonClass singletonClass= new SingletonClass("apple");

    private String a;

    private SingletonClass(String input) {
        this.a = input;
    }

    public static SingletonClass getInstance(){
        System.out.println("ha ha "+ singletonClass.a);
        return singletonClass;
    }

    public void m2(){
        System.out.println("Here");
        this.m1();
    }

    private void m1(){
        System.out.println("here");
    }
}

public class Main {

    public static void main(String[] args) {
        SingletonClass.getInstance().m2();
    }

}
4

3 回答 3

2

两者都指向同一个实例成员没有区别。

这个关键字的文档中

使用 this 关键字的最常见原因是字段被方法或构造函数参数遮蔽。

想要从文档中突出显示最后一点,没有代码,它变得无效。所以直接粘贴

例如,Point 类是这样写的

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int a, int b) {
        x = a;
        y = b;
    }
}
but it could have been written like this:

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

构造函数的每个参数都隐藏对象的一个​​字段——在构造函数 x 内部是构造函数第一个参数的本地副本。要引用 Point 字段 x,构造函数必须使用 this.x。

于 2013-07-27T08:34:15.757 回答
2

这是一种特殊的编码风格。在这种特殊情况下this是多余的,因为它是隐含的。我用它来提高可读性。通常你会用它this来解决由同名的实例变量和局部变量引起的歧义,其中局部变量隐藏了实例变量:

public class C1{
  private int x ;
  private void M1(int x){
    this.x = x;
  }
}
于 2013-07-27T08:31:43.420 回答
0

完全没有区别。

调用M1()this.M1()

尽管有人可以争辩说后一种形式更清晰易读。

于 2013-07-27T08:32:23.157 回答