1

次のJavaクラスがあります。コンストラクターで login メソッドを呼び出すときusername、クラス名を使用して静的インスタンス変数にアクセスpasswordし、キーワードを使用して静的インスタンス変数にアクセスしますthis。私の質問は、2 つのアプローチの違いは何ですか? どのような状況でどちらを使用する必要がありますか?

public class MyClass {
    private Main main;

    private static String username = "mylogindetails";

    private static String password = "mypassword";

    public MyClass(){
        this.main = new Main();
        this.main.login(MyClass.username, this.password);
    }


    public static void main(String args[]){
        MyClass myclass = new myclass();
    }
}
4

8 に答える 8

6

どちらも同等です。
ただし、を使用して静的メンバーにアクセスすることthisは誤解を招くため、絶対に避ける必要があります。

于 2010-12-22T15:38:25.207 に答える
3

変わりはない。

フィールドまたはstaticメソッドが. たとえば、Eclipse には、インスタンス参照を介してアクセスされている静的リソースに関する警告にフラグを立てる構成設定があります。thisstatic

私の好み、順番に:

  • クラス自体の中で、修飾子なしでフィールドを参照するだけです

  • クラス名を使用する

  • thisフィールド/メソッドの静的な性質が変化する可能性があり、クラスのクライアントが依存すべきではない静的であることが設計の詳細であると思われる場合にのみ、またはインスタンスを使用します (その場合、それをアクセス方法を確実にするためのインスタンスメソッド)

于 2010-12-22T15:38:07.357 に答える
2

この場合は違いはなく、同じバイトコード (GETSTATIC) にコンパイルされていると思います。

ただしMyClass.username、フィールドの性質を反映しているため、優先されます。

于 2010-12-22T15:37:56.243 に答える
1

Java チュートリアルから: インスタンスとクラスのメンバーを理解する:

クラス変数は、次のようにクラス名自体によって参照されます。

Bicycle.numberOfBicycles

これにより、それらがクラス変数であることが明確になります。

:次のようなオブジェクト参照で静的フィールドを参照することもできます

myBike.numberOfBicycles

ただし、クラス変数であることが明確にならないため、これはお勧めできません。

于 2010-12-22T15:40:56.273 に答える
0

クラスのすべてのインスタンスは同じパスワードを共有します。password は各インスタンスではなくclassに属します。これが static の意味です。

したがって、任意のインスタンスからアクセスできますが、パスワードがインスタンス固有であることを示唆しているため、そのような使用はお勧めできません。

于 2010-12-22T15:38:54.660 に答える
0

静的変数は MyClass のすべてのインスタンスで共有されるため、これを使用してそれらを参照すると誤解を招くことに注意してください。実際には単なるスタイルの違いですが、これを参照する習慣を身につけるべきではありません。

于 2010-12-22T15:41:10.317 に答える
0

まあ、静的変数はインスタンス変数ではありません。したがって、静的インスタンス変数は有効な用語ではありません。

于 2010-12-22T15:41:44.407 に答える
0

どちらも使用する必要はありません。

内部クラスがあるため、外部クラスまたはこれへの明示的な参照なしで静的変数に直接アクセスできます

静的フィールドの使用がわかりにくい場合は、それらを区別するためにすべて大文字にすることができます。多くの場合、これは定数として機能する最終的な静的フィールド用に予約されています。

于 2014-09-02T20:47:45.507 に答える