1

C1クラス ( ) と、このクラスにプライベート メソッド ( )がある多くの実装を見てきましたM1。このクラスの他のメソッドを使用してthis.M1、または単にこのメソッドを使用するのを見てきました。M1M1

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

コンストラクターへの各引数は、オブジェクトのフィールドの 1 つを隠します — コンストラクターの内部 x は、コンストラクターの最初の引数のローカル コピーです。Point フィールド x を参照するには、コンストラクターで this.x を使用する必要があります。

于 2013-07-27T08:34:15.757 に答える
0

まったく違いはありません。

呼び出しM1()は同じですthis.M1()

ただし、後者の形式の方が明確で読みやすいと言えます。

于 2013-07-27T08:32:23.157 に答える