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


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

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

2.類的靜態(tài)方法不能訪問類的實(shí)例變量,可以訪問類的靜態(tài)變量、實(shí)例化的類的實(shí)例變量

3.靜態(tài)方法中不能定義靜態(tài)變量的

前幾天在csdn上看了一篇關(guān)于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()");
  }
}
/*輸出結(jié)果:
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!然后在是自己調(diào)用的方法!
上面的執(zhí)行順序是
1: static Cups x=new Cups(); 轉(zhuǎn)入 Cups對(duì)象
2: static Cup c1=new Cup(11); 轉(zhuǎn)入 Cup對(duì)象
3: 執(zhí)行Cup的輸出 Cup(11);
4:  cups對(duì)象里的 static Cup c2;
5: static{
   c1=new Cup(1);轉(zhuǎn)入Cup對(duì)象 輸出 Cup(1)
   c2=new Cup(2);轉(zhuǎn)入Cup對(duì)象 輸出 Cup(2)
 }
6: cups對(duì)象里的 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成員已經(jīng)初始化 所以 static Cup c1=new Cup(11);
 static Cup c2;static{
   c1=new Cup(1);
   c2=new Cup(2);
 }
 不在執(zhí)行!
下面的就和上面一樣了!
*/

首次使用的地方也是static初始化發(fā)生的地方。裝載的時(shí)候,所有static對(duì)象和static代碼塊都會(huì)按照本來的順序初始化(亦即它們?cè)陬惗x代碼里寫入的順序)。當(dāng)然,static數(shù)據(jù)只會(huì)初始化一次。

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