2011-01-03 7 views
0

"静的メソッドはインスタンスフィールドと通信できません。静的フィールドのみと通信することがあります。"私はこの引用された行を読まなければなりません。私がこのフォーラムで他のスレッドを勉強したとき、私は静的メソッドでインスタンスフィールドを使用できることを発見しました。だから、これは何を意味するのですか?本当ですか?Javaの静的メソッドとインスタンスフィールドの間の通信

+1

コードを投稿してください。私たちはあなたがあなたのやり方を変えることを手助けすることができます。 – kralco626

+0

申し訳ありません、私はちょうどいくつかの資料を勉強しています。 – zdcobran

+0

Gottcha。ボゾーの爆発はかなり良いです。あなたはそれをチェックアウトする必要があります。 – kralco626

答えて

4

静的メソッドで非静的(インスタンス)フィールドを使用することはできません。これは、静的メソッドがインスタンスに関連付けられていないためです。

staticのメソッドはクラスごとに1つですが、クラスは多くのインスタンスを持つことができます。したがって、2つのインスタンスがある場合、どのフィールドに静的メソッドが表示されますか?

のは、これが有効であることを想像してみましょう:

class Foo { 
    private int bar; 

    public static int getBar() { 
     return bar; // does not compile; 
    } 
} 

そして:

Foo foo1 = new Foo(); 
foo1.bar = 1; 
Foo foo2 = new Foo(); 
foo2.bar = 2; 

Foo.getBar(); // what would this return. 1 or 2? 
+0

良いexplination。 – kralco626

1

静的メソッドでインスタンスフィールドを使用することはできません。あなたはどのインスタンスを参照していますか?

ただし、静的メソッドにはインスタンスへの参照があり、そのインスタンスのフィールドを使用します。

public class Stock { 
    public double price = 0.0; 

    public static void setPriceIncorrectly() { 
    price = 0.0 // which price ? 
    } 

    public static void setPriceCorrectly() { 
    Stock s = new Stock(); 
    s.price = 0.0 // which price ? 
    } 
} 
2
class MyClass{ 
    int i ; 
    static String res; 
    public static void myMethod(){ 
     i = 10 //not allowed because it is instance non static field 
     res = "hello" ; allowed , because it is static field 
     new MyClass().i = 10;//allowed as we are accessing it using an instance of that class 
    } 


} 

説明:staticフィールド/メソッド/ ..クラスでないのオブジェクトに関連付けられていますそのクラス。メンバ変数/メソッドは、クラスのオブジェクトに関連付けられているので、それらにアクセスするために、私たちはクラス

のオブジェクトが必要です。また、私たちは、インスタンス を使用できることがわかっ

+0

しかし、 'new MyClass()。i = 10'という行は何をしますか?彼がどこかにオブジェクトを格納しない限り、彼は何も良いことはしません。 – kralco626

+0

@ kralco626あなたの答えは –

+0

だと思います。なぜ* downvote * ?? –

1

を参照してください。静的メソッドのフィールドとその逆。 versa

これは当てはまりません。静的メソッドは "インスタンス"に属していないため、静的メソッドのインスタンスフィールドを参照することはできません。

推奨読書:http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html

0

あなたが存在していないものを使用することはできません。

静的なフィールドまたはメソッドがある場合は、インスタンスに関連付けられていません。非静的要素は存在しません。

0

インスタンスフィールドと通信するには、常にインスタンスが必要です。インスタンス(たとえば、パラメータや静的フィールド)にアクセスできる場合、そのメンバーにアクセスできます。しかし、クラスのインスタンスフィールドに直接アクセスすることはできません。

関連する問題