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プログラムには静的変数が含まれています。しかし、パブリック静的変数とプライベート静的変数の違いを理解できません。
パブリック変数はコード内のどこでもアクセス可能everywhere-プライベート変数はクラス内でのみアクセス可能です。この場合、Employee
クラス内でEmployee.salary
を使用しているため、問題ありません。
変数が静的であることは完全に別の問題であり、メソッドとクラスは変数と同じようにアクセシビリティを持っていることに注意してください。
他のレベルのアクセスも利用可能です-protected
とデフォルトの「パッケージ」アクセス(明示的に指定することはできません)。 Java言語仕様)のセクション6.6 を参照してください。
(副次的な問題として、static
が何を意味するのかを学ぶ価値もあります-ほとんど確実にこれらの変数を静的にしたくない 、それらはeachEmployee
コンセプトではなくEmployee
に適用されるため、DEPARTMENT
ここでも定数になります。)
public
変数はどこからでもアクセスできます(クラスにアクセスできる場所であればどこでも)。
private
変数は、クラス内でのみアクセス可能です。
static
変数は、クラスのインスタンスではなくクラスに属します。
変数DEPARTMENT
もfinal
であることに注意してください。これは、一度設定すると変更できないことを意味します。これはここで重要です。なぜなら、これが不正なコードであることを防ぐためです。変数は定数であるため、クラス外のオブジェクトにアクセスできるようにするのは問題ありません。
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
のみです。
private static double salary
クラス内でのみ利用可能で、次のようにアクセスできます
salary or Employee.salary
ながら
public static final String DEPARTMENT
次のように、このクラスの外部からもアクセスできます
Employee.DEPARTMENT
明らかに、クラスの外部からprivate
静的変数にアクセスすることはできません。また、どこからでもpublic
静的変数にアクセスできます。