2017-08-05 11 views
2

スタティックオブジェクトはスタティックとして定義されていても非静的フィールドにどのようにアクセスできますか?静的オブジェクトは静的であると定義されていても、非静的フィールドにどのようにアクセスできますか?

public class pp { 
    static int x = 4; 
    int y = 8; 
    public static pp hj = new pp(); 

    public static void main(String[] args) { 
     System.out.println(hj.y); //prints 8 
    } 
} 
+0

:あなたはオブジェクト参照せずに、静的コンテキストyにアクセスしようとしたら

対照的に、あなたのコードはコンパイルに失敗するだろうhj ')。 –

+0

インスタンスを介して静的メソッドで非静的メソッドを取得した場合と同様に動作します。 – atiqkhaled

答えて

0

あなたは限り、あなたは、あなたが非静的メンバにアクセスして、そこから静的インスタンスを持っているとして、そのようなmainとして、静的な文脈から、このようyとして、非静的メンバにアクセスすることができます。

あなたの場合、hjは静的インスタンスです。これは、非静的フィールドであるyとともに、静的コンテキストからアクセスできます。あなたは、インスタンスから `y`を取得しているので、`すなわち(

public class pp { 
    static int x = 4; 
    int y = 8; 
    static int z = y + 5; // <<=== This does not compile 

    public static void main(String[] args) { 
     System.out.println(y); // <<=== This does not compile either 
    } 
} 
0

hjppクラスイエスのstatic分野です。しかし、それはppのインスタンスも参照しています。

hjを使用すると、ppクラスのインスタンスメンバー(メソッドまたはフィールド)にアクセスできます。

しかし、あなたはインスタンスフィールドにアクセスしようとします。このようにstatic main method()から

int y = 8; 

public static void main(String[] args) { 
    System.out.println(y); 
} 

あなたはstaticメンバーとしてANを参照することができないことができないことがわかりますインスタンスメンバー。

0
public static pp hj = new pp(); 

どのようにそれがstaticとして定義されていていても、静的オブジェクトへのアクセス非静的フィールドができますか?

ここでオブジェクトへの参照は静的です。つまり、そのオブジェクトにアクセスするには、オブジェクトの所有者オブジェクトを作成する必要はありません(hj)。

オブジェクトへの参照を取得したら、それは静的または非静的参照ですが、オブジェクトメンバーにアクセスできます。

関連する問題