導航:首頁 > 編程語言 > java中static類

java中static類

發布時間:2022-03-08 01:45:09

java類里的static方法

代碼塊,表示載入類的時候會執行一次,以後不再執行,如果去掉static每次new對象的時候在構造方法之前執行

⑵ Java中的 static{ …… } 是什麼意思

是靜態修飾符,什麼叫靜態修飾符呢?大家都知道,在程序中任何變數或者代碼都是在編譯時由系統自動分配內存來存儲的,而所謂靜態就是指在編譯後所分配的內存會一直存在,直到程序退出內存才會釋放這個空間,也就是只要程序在運行,那麼這塊內存就會一直存在。這樣做有什麼意義呢?
在Java程序裡面,所有的東西都是對象,而對象的抽象就是類,對於一個類而言,如果要使用他的成員,那麼普通情況下必須先實例化對象後,通過對象的引用才能夠訪問這些成員,但是有種情況例外,就是該成員是用static聲明的(在這里所講排除了類的訪問控制),例如:
未聲明為static
class ClassA{
int b;
public void ex1(){

}
}
class ClassB{
void ex2{
int i;
ClassA a = new ClassA();
i = a.b; //這里通過對象引用訪問成員變數b
a.ex1; //這里通過對象引用訪問成員函數ex1
}
}

聲明為static
class ClassA{
static int b;
static void ex1(){

}
}
class ClassB{
void ex2{
int i;
i = ClassA.b; //這里通過類名訪問成員變數b
ClassA.ex1; //這里通過類名訪問成員函數ex1
}
}
通過以上兩種比較,就可以知道static用來修飾類成員的主要作用了,在java類庫當中有很多類成員都聲明為static,可以讓用戶不需要實例化對象就可以引用成員,最基本的有Integer.parseInt(),Float.parseFloat()等等用來把對象轉換為所需要的基本數據類型。這樣的變數和方法我們又叫做類變數和類方法。
接下來講一下被static修飾後的變數的值的問題,剛才在前面講過,被static修飾後的成員,在編譯時由內存分配一塊內存空間,直到程序停止運行才會釋放,那麼就是說該類的所有對象都會共享這塊內存空間,看一下下面這個例子:
class TStatic{
static int i;

public TStatic(){
i = 4;
}

public TStatic(int j){
i = j;
}

public static void main(String args[]){
TStatic t = new TStatic(5); //聲明對象引用,並實例化
TStatic tt = new TStatic(); //同上
System.out.println(t.i);
System.out.println(tt.i);
System.out.println(t.i);
}
}
這段代碼裡面Tstatic類有一個static的int變數I,有兩個構造函數,第一個用於初始化I為4,第二個用於初始化i為傳進函數的值,在main中所傳的值是5,程序首先聲明對象的引用t,然後調用帶參數的構造函數實例化對象,此時對象t的成員變數I的值為5,接著聲明對象tt,調用無參數的構造函數,那麼就把對象tt的成員變數i的值初始化為4了,注意了,在這里i是static,那就是說該類的所有對象都共享該內存,那也就是說在實例化對象tt的時候改變了i的值,那麼實際上對象t的i值也變了,因為實際上他們引用的是同一個成員變數。最後列印的結果是三個4。呵呵,寫到這里大家是否明白了呢?不明白就再看看書或者多寫幾個例子印證一下,呵呵。

⑶ java中static作用詳解

static表示「全局」或者「靜態」的意思,用來修飾成員變數和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變數的概念。

被static修飾的成員變數和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共享。

只要這個類被載入,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。

用public修飾的static成員變數和成員方法本質是全局變數和全局方法,當聲明它類的對象市,不生成static變數的副本,而是類的所有實例共享同一個static變數。

static變數前可以有private修飾,表示這個變數可以在類的靜態代碼塊中,或者類的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類中通過類名來直接引用,這一點很重要。實際上你需要搞明白,private是訪問許可權限定,static表示不要實例化就可以使用,這樣就容易理解多了。static前面加上其它訪問許可權關鍵字的效果也以此類推。

⑷ JAVA中的static

Java是個面向對象編程的語言,一般而言,方法需要通過實例對象來調用。但是有一些方法不需要實例對象(或者說沒有這樣的對象)來調用,那麼就可以在方式前面加上static修飾符,表示這個方法是靜態方法,不需要實例對象就可以調用。
例如String類的valueOf(int arg0)方法,作用是得到整數參數arg0的字元串表示,不需要創建出一個String類的實例對象來調用這個方法,所以它是static的。
如果你學過C/C++,你就會知道C/C++程序有一個入口,就是main()函數。電腦執行C/C++程序的時候就以main()函數作為入口,首先執行main()函數。Java也是類似,JVM首先調用main()方法。這個時候還沒有什麼實例對象呢,所以必須把main()方法聲明為static,以便JVM調用。

如果是在類中變數前加static修飾的話,就是另外一個意思了。例如「人」這個類,有一個成員變數叫做「姓名」。現在new一個「人」的實例對象叫做「張三」,再new一個「人」的實例對象叫做「李四」。張三、李四自然有各自的「姓名」,它們的「姓名」成員變數在內存當中各自佔一塊存儲單元,互不幹擾。但是,如果在「人」這個類的「姓名」成員變數前加上static修飾的話,那麼就變成了類變數。還是new出來「張三」「李四」,這次張三、李四的「姓名」在內存中就不是各自獨立的存儲區域了,而是共用一個存儲區域。所有「人」的實例對象的「姓名」其實都是指的那一個存儲單元。無論創建10個「人」對象還是100個「人」對象,它們的「姓名」指向的都是內存中的那一個存儲單元。如果被更改了,實際上所有的對象的「姓名」都會改了,因為它們引用的都是內存中的那一個存儲單元。就好像這個變數是屬於類而不是屬於實例對象的。

靜態方法因為不需要實例對象就可以調用,所以當然其中也不可以使用實例對象變數。原因很簡單啊,調用靜態方法的時候怎麼知道實例對象有沒有創建、實例對象變數有沒有初始化過呢。還是拿String類的valueOf()方法舉例。假設valueOf()方法裡面調用了String的一個實例對象str的某個成員變數。
那麼以下這行代碼
String.valueOf(10);
執行的時候,如何確定此時str對象就一定被創建出來並且成員變數都初始化過有值了呢?

⑸ Java中static是什麼

static
表示靜態方法,用來修飾方法,在main方法里,必須有static
,否則就會報錯,至於為什麼呢,本人也不太清楚,但是必須要,並且不能替換,main方法本身就要求是靜態的,這是規定。記住java中很多知識是自己試出來的,多試試,就知道了,好好學java,前途一片光明

⑹ 關於java中用static修飾類的問題

1.static表示靜態。他是屬於類的。可以在本身類里直接調用,或在其它類里用類名.方法名調用
2.不加static表示是實例的方法,必須用實例來調用。在本類里也一樣,必須用實例調用
如果你的類名叫Test
必須這樣調用
Test t=new Test();
t.add(4,5)
3。兩種解決方案
a)public static void main(String args[]){
int x=4,y=5;
Test t=new Test();//用實例對象調用
t.add(4,5);
}
public static void add(int x,int y){ //這邊為什麼要加static啊?
System.out.println(x+y);
}
b)加上static
這個問題是 實例變數和類變數的區別。用static修飾的變數是類變數,而沒有的為實例變數。

不同的對象的實例變數將被分配不同的內存空間,如果類中的成員變數有類變數,那麼所以對象的這個類變數都分配給相同的一處內存,改變其中一個對象的這個類變數會影響其他對象的這個類變數,也就是說對象共享類變數。
當java程序執行時,類的位元組碼文件被載入到內存,如果該類沒有創建對象,類實例成員變數不會被分配內存。但是,類中的類變數被載入到內存時,就分配了相應的內存空間。如果該類創建對象,那麼不同對象的實例變數互不相同,即分配不同的內存空間,而類變數不再重新分配內存,所有的對象共享類變數,即所有的對象的類變數是相同的一處內存空間,類變數的內存空間直到程序退出運行,才釋放所佔有的內存。類變數是與類相關聯的這個類變數就同時改變了其他對象的這個類變數。因此,類變數不僅可以通過某個對象訪問,也可以直接通過類名訪問。實例變數僅僅是和相應的對象關聯的變數,也就是說,不同對象的實例變數互不相同,即分配不同的內存空間,改變其中一個對象的實例變數不會影響其他對象的這個實例變數。實例變數可以通過對象訪問,不能使用類名訪問。
希望對你有所幫助~

⑺ java中的static

問題不是出在你有沒有加static ,把你的測試代碼發來看看吧

private static int max;相當於你在獲取類對像的時候,max會被同時初始化,值為0;並且max的值的變化會被記錄下來,生命周期是整個應用程序
Compare t=new Compare();
System.out.println(t.max); //0
t.max=2;
System.out.println(t.max); //2
Compare t2=new Compare();
System.out.println(t2.max); //2

不知道你明白了嗎

都用的你的代碼,全沒有加static 結果也是對的

⑻ java中static的用法

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

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

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

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

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

⑼ java中static是什麼意思

static是指在內存的datasegment里生成一塊內存 要用的時候不用每次都new一個新的內存空間 直接用類名+static的方法名或變數名引用就可以了 args是字元串數組的名字 你喜歡也可以換成String[] haha 方括弧放前面後面都可以 習慣放前面

⑽ JAVA中一個類里的 static{.....} 是什麼 是靜態構造函數么

這個叫static代碼塊,這個代碼塊裡面的語句,比構造器裡面的語句執行的還要早。和static變數同時被初始化,然後再去執行構造器里的語句。:

如果你new People();那麼,執行順序如下:

public class People{
static int peopleNum=0; //先執行這個
static {
.... //再執行這裡面的語句
}
public People(){
...//最後執行構造器里的語句

}
}
綜上,
一個類裡面,所有標注了static修飾符的花括弧代碼塊或變數,都會按照你的書寫順序,先後被初始化。是變數的,則初始化該變數;是語句塊的,則執行該語句塊。

JAVA里的static代碼塊就跟static變數一樣,你可以把這個花括弧語句塊也當成一個變數,他的生命周期和static變數一樣長。

閱讀全文

與java中static類相關的資料

熱點內容
優信二手車解壓後過戶 瀏覽:62
Windows常用c編譯器 瀏覽:778
關於改善國家網路安全的行政命令 瀏覽:833
安卓如何下載網易荒野pc服 瀏覽:654
javainetaddress 瀏覽:104
蘋果4s固件下載完了怎麼解壓 瀏覽:1003
命令zpa 瀏覽:286
python編譯器小程序 瀏覽:945
在app上看視頻怎麼光線調暗 瀏覽:540
可以中文解壓的解壓軟體 瀏覽:593
安卓卸載組件應用怎麼安裝 瀏覽:913
使用面向對象編程的方式 瀏覽:339
程序員項目經理的年終總結範文 瀏覽:929
內衣的加密設計用來幹嘛的 瀏覽:433
淮安數據加密 瀏覽:292
魔高一丈指標源碼 瀏覽:982
松下php研究所 瀏覽:168
c回調java 瀏覽:401
夢幻端游長安地圖互通源碼 瀏覽:746
電腦本地文件如何上傳伺服器 瀏覽:313