Static  :
對于類的屬性來說
有類變量和實例變量
class StaticTest
{  static int i=47;
}
對于不同的對象  StaticTest st1=new StaticTest(),StaticTest st2=new StaticTest()都只有一個共享的存儲空間!
引用Static變量有兩種方法.可以用一個對象去定位他。.也可以用其類名直接調用!
如果一個成員被聲明為static,他就能夠在他的類的對象被創建之前被訪問,不必引用任何對象。最常見的例子是main()方法,
static定義的變量會優先于任何其它非static變量,不論其出現的順序如何;
Java變量在類這個級別分兩種,類變量(static)和實例變量,而在靜態的方法中不能夠直接訪問實例變量,實例變量需要初始化一個類的實例才可以用。


靜態的東西之所以有這種區分是為了區別對待類和對象的成員。如果某個變量或者方法被聲明為static,意味著在類初始化時就必須分配內存空間。而方法調用內部需要的變量既然是臨時的,會隨著方法調用結束而失效的,那么沒有道理讓它成為static的對吧

1.靜態變量屬于類,為該類所有對象所分享,在程序開始執行前就分配內存空間,其作用可以類似VB中的全局變量,如果前面加上final,功能類似全局常量,不可以修改其值.比如圓周率

2.類的靜態方法不能訪問類的實例變量,可以訪問類的靜態變量、實例化的類的實例變量

3.靜態方法中不能定義靜態變量的

前幾天在csdn上看了一篇關于static的帖子,看了之后感覺很多疑惑都澄清了,今天粘在這里。

public class ExplicitStatic{
  public static void main(String[] args){
    System.out.println("Inside main()");
      Cups.c1.f(99);
 }
 static Cups x=new Cups();
 static Cups y=new Cups();
}
class Cup{
      Cup(int marker){
         System.out.println("Cup("+marker+")");
      }
      void f(int marker){
         System.out.println("f("+marker+")");
      }
}
class Cups{
  static Cup c1=new Cup(11);
  static Cup c2;
  Cup c3=new Cup(33);
  Cup c4;
 { c3=new Cup(3);
   c4=new Cup(4);
 }
 static{
   c1=new Cup(1);
   c2=new Cup(2);
 }
 Cups(){
 System.out.println("Cups()");
  }
}
/*輸出結果:
cup(11)
cup(1)
cup(2)
cup(33)
cup(3)
cup(4)
cups()
cup(33)
cup(3)
cup(4)
cup()
inside main()
f(99)
*/
/*
首先初始化的是static,順序是代碼順序up-to-down!然后在是自己調用的方法!
上面的執行順序是
1: static Cups x=new Cups(); 轉入 Cups對象
2: static Cup c1=new Cup(11); 轉入 Cup對象
3: 執行Cup的輸出 Cup(11);
4:  cups對象里的 static Cup c2;
5: static{
   c1=new Cup(1);轉入Cup對象 輸出 Cup(1)
   c2=new Cup(2);轉入Cup對象 輸出 Cup(2)
 }
6: cups對象里的 Cup c3=new Cup(33); 輸出 Cup(33)
7:c3=new Cup(3); 輸出 Cup(3)
   c4=new Cup(4); 輸出 Cup(4)
8:Cups(){
 System.out.println("Cups()"); 輸出 Cups()
  }
9:static Cups y=new Cups();
 注意Cups里的static成員已經初始化 所以 static Cup c1=new Cup(11);
 static Cup c2;static{
   c1=new Cup(1);
   c2=new Cup(2);
 }
 不在執行!
下面的就和上面一樣了!
*/

首次使用的地方也是static初始化發生的地方。裝載的時候,所有static對象和static代碼塊都會按照本來的順序初始化(亦即它們在類定義代碼里寫入的順序)。當然,static數據只會初始化一次。

程序一開始訪問MAIN方法,然后開始一加載對應的CLASS文件,如果他具有基類,加載基類,最后完成STATIC的初始化,