Java 中的static屬性 主要用于保持?jǐn)?shù)據(jù)唯一性。
你可以用Random測(cè)試一下
import java.util.Random;
class Test1{
Random ran = new Random();
static Random ran2 = new Random();
static int i = ran2.nextInt(100);
static int a =ran2.nextInt(100);
int b = ran.nextInt(100);
int c = ran.nextInt(100);
public Test1(){
System.out.println("靜態(tài)屬性i = " + i + ";a = " +a );
System.out.println("非靜態(tài)屬性 b = " + b +";c = " +c );
}
public static void method(){
i=90;
}
}
class Test{
public static void main(String[] args){
new Test1();
new Test1();
}
}
從上面的運(yùn)行結(jié)果我們可以看到靜態(tài)屬性的值在內(nèi)存中是唯一一份的(即只初始化一次)。
當(dāng)你感覺(jué)你需要數(shù)據(jù)唯一性,或者有時(shí)候你不想創(chuàng)建整個(gè)類的對(duì)象,經(jīng)常用到其中一個(gè)對(duì)象而已的話,那么干脆就把這個(gè)變量或?qū)ο蠖x為static。 可以直接用類名引用!
靜態(tài)屬性不屬于類實(shí)例的一部分,你可以在上面Test1的構(gòu)造函數(shù)中見證這一點(diǎn)。 即使我們實(shí)例了Test1兩次,但i 和 a 依然不變。
至于說(shuō)什么時(shí)候可以用和不可以用的話
那么就是static變量只能做為全局變量,假設(shè)你把static聲明在方法里那么一定會(huì)出錯(cuò)的。因?yàn)榫植孔兞柯暶鳛閟tatic是完全沒(méi)有意義的。
修飾成員使數(shù)據(jù)一直存于內(nèi)存,已方便調(diào)用,適合常量定義
修飾方法,無(wú)需初始化該方法所在類的對(duì)象,直接可以通過(guò)類名.方法名的方式來(lái)調(diào)用,方便快捷。
static 修飾的變量 就是在程序啟動(dòng)的時(shí)候在內(nèi)存一直存在,直到程序關(guān)閉。
static 是靜態(tài),
他告訴虛擬機(jī),說(shuō),我用這個(gè)修飾的,你給我放在靜態(tài)池里面(內(nèi)存),并且,先給我執(zhí)行。
static 修飾的,會(huì)先于非靜態(tài)修飾的,
比如
1. private String abc = "123";
2. private static String abc = "123"
1的執(zhí)行條件是,當(dāng)虛擬機(jī),實(shí)例化了某個(gè)類,這個(gè)abc才賦值。
2.的執(zhí)行條件是,當(dāng)虛擬機(jī),一執(zhí)行,就把a(bǔ)bc賦值了。這就是為什么,靜態(tài)方法,不需要實(shí)例化類,就能使用的原因,