當前位置:首頁 » 編程語言 » static在java

static在java

發布時間: 2022-06-25 23:36:18

『壹』 java中static的用法

1.靜態方法
通常,在一個類中定義一個方法為static,那就是說,無需本類的對象即可調用此方法
聲明為static的方法有以下幾條限制:
·它們僅能調用其他的static 方法。
·它們只能訪問static數據。
·它們不能以任何方式引用this 或super。
class Simple {
staticvoid go() {
System.out.println("Welcome");
}
}

publicclass Cal {
publicstaticvoid main(String[] args) {
Simple.go();
}
}
調用一個靜態方法就是「類名.方法名」,靜態方法的使用很簡單如上所示。一般來說,靜態方法常常為應用程序中的其它類提供一些實用工具所用,在Java的類庫中大量的靜態方法正是出於此目的而定義的。

2.靜態變數
聲明為static的變數實質上就是全局變數。當聲明一個對象時,並不產生static變數的拷貝,而是該類所有的實例變數共用同一個static變數。靜態變數與靜態方法類似。所有此類實例共享此靜態變數,也就是說在類裝載時,只分配一塊存儲空間,所有此類的對象都可以操控此塊存儲空間,當然對於final則另當別論了
class Value {
staticintc = 0;

staticvoid inc() {
c++;
}
}

publicclass Count2 {
publicstaticvoid prt(String s) {
System.out.print(s);
}

publicstaticvoid main(String[] args) {
Value v1, v2;
v1 = new Value();
v2 = new Value();
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v1.inc();
prt(" v1.c=" + v1.c + " v2.c=" + v2.c);
}
}
結果為:v1.c=0 v2.c=0 v1.c=1 v2.c=1
由此可以證明它們共享一塊存儲區。static變數有點類似於C中的全局變數的概念。

值得探討的是靜態變數的初始化問題。
如果你需要通過計算來初始化你的static變數,你可以聲明一個static塊,Static 塊僅在該類被載入時執行一次。下面的例子顯示的類有一個static方法,一些static變數,以及一個static 初始化塊:
class Value3 {
staticintc = 0;

Value3() {
c = 15;
}

Value3(int i) {
c = i;
}

staticvoid inc() {
c++;
}
}

publicclass Count {
publicstaticvoid prt(String s) {
System.out.println(s);
}

Value3 v = new Value3(10);
static Value3 v1, v2;
static {//此即為static塊
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v1 = new Value3(27);
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v2 = new Value3(15);
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
}

publicstaticvoid main(String[] args) {
Count ct = new Count();
prt("ct.c=" + ct.v.c);
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v1.inc();
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
prt("ct.c=" + ct.v.c);
}
}

結果為:
v1.c=0 v2.c=0
v1.c=27 v2.c=27
v1.c=15 v2.c=15
ct.c=10
v1.c=10 v2.c=10
v1.c=11 v2.c=11
ct.c=11
這個程序展示了靜態初始化的各種特性。如果你初次接觸Java,結果可能令你吃驚。可能會對static後加大括弧感到困惑。首先要告訴你的是,static定義的變數會優先於任何其它非static變數,不論其出現的順序如何。正如在程序中所表現的,雖然v出現在v1和v2的前面,但是結果卻是v1和v2的初始化在v的前面。在static{後面跟著一段代碼,這是用來進行顯式的靜態變數初始化,這段代碼只會初始化一次,且在類被第一次裝載時。如果你能讀懂並理解這段代碼,會幫助你對static關鍵字的認識。在涉及到繼承的時候,會先初始化父類的static變數,然後是子類的,依次類推。

3.靜態類
通常一個普通類不允許聲明為靜態的,只有一個內部類才可以。這時這個聲明為靜態的內部類可以直接作為一個普通類來使用,而不需實例一個外部類。
publicclass StaticCls {
publicstaticvoid main(String[] args) {
OuterCls.InnerCls oi = newOuterCls.InnerCls();
}
}

classOuterCls {
publicstaticclass InnerCls {
InnerCls() {
System.out.println("InnerCls");
}
}
}
結果為:InnerCls

『貳』 java static作用

  • 作用於方法上時:static方法一般稱作靜態方法,由於靜態方法不依賴於任何對象就可以進行訪問,因此對於靜態方法來說,是沒有this的,因為它不依附於任何對象,既然都沒有對象,就談不上this了。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變數和非靜態成員方法,因為非靜態成員方法/變數都是必須依賴具體的對象才能夠被調用。但是要注意的是,雖然在靜態方法中不能訪問非靜態成員方法和非靜態成員變數,但是在非靜態成員方法中是可以訪問靜態成員方法/變數的。

  • 作用於變數上時:static變數也稱作靜態變數,靜態變數和非靜態變數的區別是:靜態變數被所有的對象所共享,在內存中只有一個副本【存放在方法區】,它當且僅當在類初次載入時會被初始化【加final和不加final的static變數初始化的位置不一樣】。而非靜態變數是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。static成員變數的初始化順序按照定義的順序進行初始化。

作用於代碼塊上時:形成靜態代碼塊以優化程序性能。因為它的特性:只會在類載入的時候執行一次。

  • 作用於內部類上時:在定義內部類的時候,可以在其前面加上一個許可權修飾符static。此時這個內部類就變為了靜態內部類。通常稱為嵌套類,當內部類是static時,意味著:

[1]要創建嵌套類的對象,並不需要其外圍類的對象;

[2]不能從嵌套類的對象中訪問非靜態的外圍類對象(不能夠從靜態內部類的對象中訪問外部類的非靜態成員);

另外,在創建靜態內部類時不需要將靜態內部類的實例綁定在外部類的實例上。普通非靜態內部類的對象是依附在外部類對象之中的,要在一個外部類中定義一個靜態的內部類,不需要利用關鍵字new來創建內部類的實例。靜態類和方法只屬於類本身,並不屬於該類的對象,更不屬於其他外部類的對象。

  • 作用於導包上時:用import static代替import靜態導入包是JDK1.5中的新特性。一般我們導入一個類都用 import com…..ClassName;而靜態導入是這樣:import static com…..ClassName.*;這里的多了個static,還有就是類名ClassName後面多了個.* ,意思是導入這個類里的靜態方法。當然,也可以只導入某個靜態方法,只要把 .* 換成靜態方法名就行了。然後在這個類中,就可以直接用方法名調用靜態方法,而不必用ClassName.方法名的方式來調用。

『叄』 java中static的作用

static可以修飾變數(屬性)、方法、代碼塊和內部類

  1. static屬性:屬於這個類所有,即由該類創建的所有對象共享同一個static屬性。可以對象創建後通過對象名.屬性名和類名.屬性名兩種方式來訪問。也可以在沒有創建任何對象之前通過類名.屬性名的方式來訪問。

  2. static方法:也可以通過對象名.方法名和類名.方法名兩種方式來訪問

  3. static代碼塊:當類被第一次使用時(可能是調用static屬性和方法,或者創建其對象)執行靜態代碼塊,且只被執行一次,主要作用是實現static屬性的初始化。

  4. static內部類:屬於整個外部類,而不是屬於外部類的每個對象。不能訪問外部類的非靜態成員(變數或者方法),.可以訪問外部類的靜態成員

題主的問題可以參考第一點

『肆』 JAVA! static什麼作用

static是靜態修飾符,static可以用來區分成員變數、方法是屬於類本身還是屬於類實例化後的對象。有static修飾的成員屬於類本身,沒有static修飾的成員屬於類的實例。

static靜態變數是屬於類的,只有一份存儲空間,是類之間共享的,牽一發而動全身,一處變,處處變。實例變數屬於實例對象,創建幾次對象,就有幾份的成員變數(拷貝)。

(4)static在java擴展閱讀

static的使用

示例:

classa{

publicstatic$aa=1;

publicstaticfunctionaa(){

self::$aa+=1;

echoself::$aa;

}

}

classb{

publicfunctionbb(){

a::aa();

}

}

classc{

publicfunctioncc(){

a::aa();

}

}

$bbb=newb();

$ccc=newc();

$bbb->bb();

echo'*******************';

$ccc->cc();

『伍』 java中static怎麼用

static
屬於全局,也就是類的屬性
和方法,換句話說
一個類,不管有多少個實例,卻只有一個全局變數
class
B
{static
int
a=0;}
B
b1=new
B();..................;B
bn=new
B();
b1~bn
都是類B的實例,每個實例都共享
變數a,a是全局變數,屬於類B的屬性,每個實例都能引用變數a,
加入執行b1.a=1;後
那麼b2.a,b3.a,b4.a......bn.a
都等於1了,
static
方法也是類似的
需要注意的是
靜態屬性和方法屬於類方法,載入類後,就已經存在靜態屬性和方法,實例是需要用new構造出來後
才會有引用
根據先後順序,就有以下兩條規則
1、非靜態的方法可以調用靜態的或者非靜態的屬性和方法;
2、靜態的方法不可以調用非靜態的屬性和方法,因為非靜態的還不一定存在,只能先構造出來後,再通過實例引用
例如
在main方法中
可以直接調用static
的方法,調用非static方法
需要先構造出類的實例,通過實例才能調用方法

『陸』 Java中static的作用

1.static 成員變數

在 Java 中還支持用 static 修飾的內部類,稱為靜態內部類。靜態成員內部類的特點主要是它本身是類相關的內部類,所以它可以不依賴於外部類實例而被實例化。靜態內部類不能訪問其外部類的實例成員(包括普通的成員變數和方法),只能訪問外部類的類成員(包括靜態成員變數和靜態方法)。即使是靜態內部類的實例方法(非靜態成員方法)也不能訪問其外部類的實例成員。

『柒』 java中static關鍵字的意義

1. static關鍵字 : 靜態的意思。可以修飾成員變數和成員方法。

2. static關鍵字的特點

  • A : 隨著類的載入而載入

  • B : 優先於對象存在

  • C : 被類的所有對象共享

    這其實也是我們判斷該不該使用靜態的依據。
    同一個班級的學生應該共用同一個班級編號。
    飲水機 (用靜態修飾)
    水杯 (不能用靜態修飾)

  • D : 可以通過類名調用

    既可以通過對象名調用,也可以通過類名調用,建議通過類名調用。

  • 3. static關鍵字的注意事項

  • A : 在靜態方法中沒有this關鍵字,如何理解呢 ?

    靜態是隨著類的載入而載入,this是隨著對象的創建而存在。

    靜態比對象先存在。

  • B : 靜態只能訪問靜態。

    靜態方法只能訪問靜態的成員變數。

    靜態方法只能訪問靜態的成員方法。

    非靜態方法可以訪問靜態和非晶態的成員變數。

    非靜態方法可以訪問靜態和非晶態的成員方法。

  • 4. 靜態變數和成員變數的區別

  • A : 所屬不同

    靜態變數:屬於類,類變數
    成員變數:屬於對象,對象變數,實例變數

  • B : 內存位置不同

    靜態變數:方法區的靜態區
    成員變數:堆內存

  • C : 生命周期不同

    靜態變數:靜態變數是隨著類的載入而載入,隨著類的消失而消失
    成員變數:成員變數是隨著對象的創建而存在,隨著對象的消失而消失

  • D : 調用不同

    靜態變數:可以通過對象名調用,也可以通過類名調用
    成員變數:只能通過對象名調用

『捌』 java中的static到底有什麼作用

static表示「全局」或者「靜態」的意思,用來修飾成員變數和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變數的概念。被static修飾的成員變數和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。static變數前可以有private修飾,表示這個變數可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問許可權限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問許可權關鍵字的效果也以此類推。

『玖』 在JAVA語言中,關鍵字static如何具體解釋

static是靜態修辭符號。用它來修辭成員變數被視為類的成員變數,而不能當成實例變數,也就是說,靜態變數是類固有的,可以被直接引用,而其他成員變數申明後,只有生成對象後才可以引用!

『拾』 誰能告訴我static在java中的解釋和具體的用法

static是一個靜態的變數,函數內部定義的變數,在程序執行到它的定義處時,編譯器為它在棧上分配空間,大家知道,函數在棧上分配的空間在此函數執行結束時會釋放掉,這樣就產生了一個問題:
如果想將函數中此變數的值保存至下一次調用時,如何實現?
最容易想到的方法是定義一個全局的變數,但定義為一個全局變數有許多缺點,最明顯的缺點是破壞了此變數的訪問范圍(使得在此函數中定義的變數,不僅僅受此函數控制)。
需要一個數據對象為整個類而非某個對象服務,同時又力求不破壞類的封裝性,即要求此成員隱藏在類的內部,對外不可見。

熱點內容
死鎖避免的演算法 發布:2025-02-05 04:43:07 瀏覽:579
python查文檔 發布:2025-02-05 04:27:49 瀏覽:496
javaxmldom 發布:2025-02-05 04:27:40 瀏覽:9
linux修改內存大小 發布:2025-02-05 04:26:05 瀏覽:997
ftp命令復制文件 發布:2025-02-05 04:26:00 瀏覽:303
python好用的ide 發布:2025-02-05 04:14:18 瀏覽:516
id密碼開頭是多少 發布:2025-02-05 04:11:51 瀏覽:101
數據結構c語言ppt 發布:2025-02-05 04:11:45 瀏覽:43
如何用學習機配置的筆寫字 發布:2025-02-05 04:09:15 瀏覽:395
5歲編程 發布:2025-02-05 04:06:21 瀏覽:653