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的初始化,