[転載]Javaにおけるstaticの役割


クラスメンバーを定義して、クラスの任意のオブジェクトと完全に独立して使用することもあります.通常、クラスメンバーはクラスのオブジェクトからアクセスする必要がありますが、特定のインスタンスを参照することなく、独自に使用できるメンバーを作成できます.メンバーの宣言にキーワードstatic(静的)を付けると、このようなメンバーが作成されます.メンバーがstaticとして宣言されると、オブジェクトを参照することなく、クラスの任意のオブジェクトが作成される前にアクセスできます.メソッドと変数をstaticとして宣言できます.staticメンバーの最も一般的な例はmain()です.プログラムの実行開始時にmain()を呼び出す必要があるため、staticとして宣言されます.
staticと宣言された変数は実質的にグローバル変数である.オブジェクトを宣言すると、static変数のコピーは生成されず、クラスのすべてのインスタンス変数が同じstatic変数を共有します.staticとして宣言する方法には、次の制限があります.
◆他のstaticメソッドのみを呼び出すことができます.
◆staticデータにのみアクセスできます.
◆thisやsuperはいかなる方法でも参照できません

       
       
       
       
package com.birdme;
public class UseStatic {
/**
* @param args
*/
private static int s;   
public UseStatic(){
System.out.println("Create new Class");
}
static {
System.out.println("static block initialized");
}   
public int getStatic(){
return s;
}
public void  setStatic(int i){
s=i;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
UseStatic classA= new UseStatic();
UseStatic classB= new UseStatic();
System.out.println("classA.s="+classA.getStatic()+";classB.s=
"+classB.getStatic());
classA.setStatic(10);
System.out.println("classA.s="+classA.getStatic()+";classB.s=
"+classB.getStatic());
classB.setStatic(classB.getStatic()+10);
System.out.println("classA.s="+classA.getStatic()+";classB.s=
"+classB.getStatic());
}
}

次はプログラムの出力です.

       
       
       
       
static block initialized
Create new Class
Create new Class
classA.s=0;classB.s=0
classA.s=10;classB.s=10
classA.s=20;classB.s=20

結果からクラス内のstaticブロックプログラムはクラスがマウントされたときに実行されることがわかる.オブジェクトを作成するときに実行するのではなく、