1

これは確かに初歩的な質問ですが、私の問題を明確にするために尋ねなければなりません。クラス メンバーをstaticにすると、 class.memberのような構文を使用して、インスタンス化せずにアクセスできます。オブジェクトが作成されるとき、それは静的メンバーを受け取りますか?その値は変更できますか? 静的メンバーはオブジェクトを必要としないため、どのオブジェクトでも同じですか? (つまり、一方が変更され、他方が変更されます)。

基本的に、静的メンバーはオブジェクトにどのように実装され、どのように変更されるのでしょうか? それらは静的メソッドでのみ操作できますか?

皆さん、ありがとうございました。

4

5 に答える 5

1

オブジェクトが作成されるとき、それは静的メンバーを受け取りますか?その値は変更できますか?

はい、もちろん、オブジェクトを使用して静的メンバーの値を変更できますが、クラス名を使用して変更した方がよいでしょう。

静的メンバーはオブジェクトを必要としないため、どのオブジェクトでも同じですか?

はい、静的メンバーとは、このメンバーがこのクラスで作成されたすべてのインスタンスで同じであり、任意のオブジェクトまたはクラス名を介してアクセスできることを意味します。

彼らはどのように変化しますか?

静的メンバーの値を変更するには、次の 2 つの方法があります。

public static int x = 5;
Object.x = 10;
Class.x = 20

静的メンバーの値を変更する両方の方法は正しいですが、最初の方法では警告が表示され、2 番目の方法では表示されません。

于 2013-05-16T01:10:18.370 に答える
1

静的メンバーはオブジェクトに入りますか?

いいえ、別の場所、実際にはクラス自体で開催されます。

オブジェクトが作成されるとき、それは静的メンバーを受け取りますか?

いいえ。

その値は変更できますか?

はい、最終的なものでない限り、その変更はすべてのインスタンスで見られる単一の静的変数に影響します。

静的メンバーはオブジェクトを必要としないため、どのオブジェクトでも同じですか? (つまり、一方が変更され、他方が変更されます)。

はい。

基本的に、静的メンバーはオブジェクトにどのように実装されていますか

そうではありません。それらはクラスに実装されています。

そしてそれらはどのように変化しますか?

いつ、どのように変更するか。

それらは静的メソッドでのみ操作できますか?

いいえ、静的変数は、それにアクセスできる任意のメソッドで操作できます。

于 2013-05-16T01:07:19.157 に答える
1

これを見てみましょう。

まず最初に、静的メソッド (およびさらに言えば静的変数) がClass特定のインスタンスに関連付けられていないことを思い出してください。インスタンスを作成しなくても、静的メソッドは存在します。

静的メソッドにアクセスするには、次のようにします。

ClassName.staticMethodName(args)

Java では、インスタンス (オブジェクト) を使用して静的変数にアクセスすることもできますが、メソッドが静的かどうかについて混乱が生じるため、これは推奨されません。

objectName.staticMethodName(args)

今あなたの質問に:

オブジェクトが作成されるとき、それは静的メンバーを受け取りますか?その値は変更できますか?

静的メンバーは、オブジェクトではなく定義クラスとともに存在します。Static メンバーが変更可能な変数である場合、その値は確実に変更できます。全員 (クラス自身のオブジェクト、その他のオブジェクト、その他の静的メソッド) は同じ値を参照します。

静的メンバーはオブジェクトを必要としないため、どのオブジェクトでも同じですか? (つまり、一方が変更され、他方が変更されます)。

はい。ただし、繰り返しになりますが、静的メンバーはオブジェクトではなくクラスに関連付けられていることに注意してください。

基本的に、静的メンバーはオブジェクトにどのように実装され、どのように変更されるのでしょうか? それらは静的メソッドでのみ操作できますか?

ああ、これは疲れます:)静的メンバーはオブジェクトに実装されていません。それらは、他の静的および非静的メソッドから操作できます(基本的に、提供されたアクセス許可がある場所から)。ただし、静的メンバーは、そのインスタンスを定義しない限り、インスタンス変数を参照できません。

于 2013-05-16T01:09:24.623 に答える
0

@Doorknobの回答に加えて、特に以下に対応して:

静的メソッドでのみ操作できます

以下に示すように、さまざまな方法で静的メンバーにアクセスして変更できます。

public class Foo {

    public static String BAR = "BAR!!";

    public static void changeBAR() {
        BAR = "BAZ!";
    }

    public void instanceMethod() {
        // some code
        BAR = "CHANGED AGAIN!";
        // some code
    }

    public static void main(String[] args) {
        Foo f = new Foo();
        System.out.println(Foo.BAR);

        Foo.changeBAR();
        System.out.println(Foo.BAR);

        f.instanceMethod();
        System.out.println(Foo.BAR);

        Foo.BAR = "WHATS HAPPENING";
        System.out.println(Foo.BAR);
    }
}

結果は次のとおりです。

BAR!!
BAZ!
CHANGED AGAIN!
WHATS HAPPENING
于 2013-05-16T01:00:56.943 に答える