web-dev-qa-db-ja.com

パブリック静的変数とプライベート静的変数の違い

class Employee{
 // salary  variable is a private static variable
private static double salary;

// DEPARTMENT is a constant
 public static final String DEPARTMENT = "Development";

public static void main(String args[]){
   salary = 1000;
  System.out.println(DEPARTMENT+  "  average salary:"+salary);
}
}

このJavaプログラムには静的変数が含まれています。しかし、パブリック静的変数とプライベート静的変数の違いを理解できません。

12
Android Girl

パブリック変数はコード内のどこでもアクセス可能everywhere-プライベート変数はクラス内でのみアクセス可能です。この場合、Employeeクラス内でEmployee.salaryを使用しているため、問題ありません。

変数が静的であることは完全に別の問題であり、メソッドとクラスは変数と同じようにアクセシビリティを持っていることに注意してください。

他のレベルのアクセスも利用可能です-protectedとデフォルトの「パッケージ」アクセス(明示的に指定することはできません)。 Java言語仕様)のセクション6.6 を参照してください。

(副次的な問題として、staticが何を意味するのかを学ぶ価値もあります-ほとんど確実にこれらの変数を静的にしたくない 、それらはeachEmployeeコンセプトではなくEmployeeに適用されるため、DEPARTMENTここでも定数になります。)

25
Jon Skeet
  • public変数はどこからでもアクセスできます(クラスにアクセスできる場所であればどこでも)。

  • private変数は、クラス内でのみアクセス可能です。

  • static変数は、クラスのインスタンスではなくクラスに属します。

  • 変数DEPARTMENTfinalであることに注意してください。これは、一度設定すると変更できないことを意味します。これはここで重要です。なぜなら、これが不正なコードであることを防ぐためです。変数は定数であるため、クラス外のオブジェクトにアクセスできるようにするのは問題ありません。

26
trutheality

public static-クラス内およびクラス外からアクセスできます。

private static-クラス内からのみアクセスできます。

StaticはOOPSでは反オブジェクト指向であると見なされます。

class Dog
{
    public static string X;
    private static string y;
}

yは、Dog.yまたはDogのいずれかを介してy内からのみアクセスできます。 Xは、Dog.Xを介してどこからでもアクセスできます。クラス内にいる場合、またはusing static Dogをヘッダーとして使用している場合は、Xのみです。

3
Preetham R U
private static double salary

クラス内でのみ利用可能で、次のようにアクセスできます

salary or Employee.salary

ながら

 public static final String DEPARTMENT

次のように、このクラスの外部からもアクセスできます

Employee.DEPARTMENT
3
Manish Mulani

明らかに、クラスの外部からprivate静的変数にアクセスすることはできません。また、どこからでもpublic静的変数にアクセスできます。

1
Andrew Logvinov