⑴ 在java中什麼時候使用static ,static是不是等於全局變數
static是靜態變數,並不是常量,全局變數是相對於局部變數來說的,全局變數可以改變,在程序的任何地方都可以讀取和修改,而局部變數只能在語句塊內作用,超出作用范圍就失效了.
靜態變數(static)是相對自動變數(auto)等而言的,一旦聲明為靜態變數,在編譯時刻開始永遠存在,不受作用域范圍約束,但是如果是局部靜態變數,則此靜態變數只能在局部作用域內使用,超出范圍不能使用,但是它確實還佔用內存,還存在.自動變數就是一般的變數,在C語言中auto關鍵字可以省略.
int d;//全局變數
static int a;//靜態全局變數
void func()
{
int c;//局部變數
}
main()
{
static int d;//靜態局部變數
int b;//局部變數
}
⑵ java中什麼時候該用static修飾方法有什麼好處或者壞處
有時你希望定義一個類成員,使它的使用完全獨立於該類的任何對象。通常情況下,類成員必須通過它的類的對象訪問,但是可以創建這樣一個成員,它能夠被它自己使用,而不必引用特定的實例。在成員的聲明前面加上關鍵字static(靜態的)就能創建這樣的成員。如果一個成員被聲明為static,它就能夠在它的類的任何對象創建之前被訪問,而不必引用任何對象。你可以將方法和變數都聲明為static。static 成員的最常見的例子是main( ) 。因為在程序開始執行時必須調用main() ,所以它被聲明為static。
聲明為static的變數實質上就是全局變數。當聲明一個對象時,並不產生static變數的拷貝,而是該類所有的實例變數共用同一個static變數。聲明為static的方法有以下幾條限制:
·
它們僅能調用其他的static 方法。
·
它們只能訪問static數據。
·
它們不能以任何方式引用this 或super(關鍵字super 與繼承有關,在下一章中描述)。
如果你需要通過計算來初始化你的static變數,你可以聲明一個static塊,Static 塊僅在該類被載入時執行一次。下面的例子顯示的類有一個static方法,一些static變數,以及一個static 初始化塊:
// Demonstrate static variables,methods,and blocks.
classUseStatic{
staticinta=3;
staticintb;
staticvoidmeth(intx){
System.out.println("x="+x);
System.out.println("a="+a);
System.out.println("b="+b);
}
static{
System.out.println("Staticblockinitialized.");
b=a*4;
}
publicstaticvoidmain(Stringargs[]){
meth(42);
}
}
一旦UseStatic 類被裝載,所有的static語句被運行。首先,a被設置為3,接著static 塊執行(列印一條消息),最後,b被初始化為a*4 或12。然後調用main(),main() 調用meth() ,把值42傳遞給x。3個println ( ) 語句引用兩個static變數a和b,以及局部變數x 。
注意:在一個static 方法中引用任何實例變數都是非法的。
下面是該程序的輸出:
Static block initialized.
x = 42
a = 3
b = 12
在定義它們的類的外面,static 方法和變數能獨立於任何對象而被使用。這樣,你只要在類的名字後面加點號運算符即可。例如,如果你希望從類外面調用一個static方法,你可以使用下面通用的格式:
classname.method( )
這里,classname 是類的名字,在該類中定義static方法。可以看到,這種格式與通過對象引用變數調用非static方法的格式類似。一個static變數可以以同樣的格式來訪問——類名加點號運算符。這就是Java 如何實現全局功能和全局變數的一個控製版本。
下面是一個例子。在main() 中,static方法callme() 和static 變數b在它們的類之外被訪問。
classStaticDemo{
staticinta=42;
staticintb=99;
staticvoidcallme(){
System.out.println("a="+a);
}
}
classStaticByName{
publicstaticvoidmain(Stringargs[]){
StaticDemo.callme();
System.out.println("b="+StaticDemo.b);
}
}
下面是該程序的輸出:
a = 42
b = 99
⑶ java 什麼時候用static
當一個方法或者變數需要初始化載入,或者是經常被調用的時候可以加上static。
用static修飾的方法可以用類名. 直接調用,不用的一定要先實例化一個對象然後才可以調用
⑷ java什麼時候用static
static可以修飾變數,方法,類。
1)修飾變數,變數內存中只有一份,即使創建多個類,這個變數在內存也只有一份,所有對象都引用這一個變數。且訪問這個變數可以直接用類名.變數名訪問,跟是否有對象實例無關
2)修飾方法,該方法在虛擬機載入主方法時就會被創建,用類名.方法名可以直接調用,跟是否有對象實例無關
3)Java裡面static一般用來修飾成員變數或函數。但有一種特殊用法是用static修飾內部類。修飾內部類不用創建實例,外部類知己使用
⑸ java 中的static 存在時間問題
final表示不可以修改,和c++的const一樣
static的變數,從定義開始,一直到程序結束都是存在的,就算這個對象被銷毀了,依然存在,
比如有一個類A,其中有一個靜態變數s,
定義A a;
a.s=1;
則即使
a=null;
A b;
b中的s還是1
⑹ java中,什麼時候用static修飾method
當一個方法或者變數需要初始化載入,或者是經常被調用的時候可以加上static。
用static修飾的方法可以用類名直接調用,不用的一定要先實例化一個對象然後才可以調用
比如 person這個類裡面有一個方法public static add(){}
那麼可以直接用person類調用 person.add();當然也可以用下面的方法先出一個對象在調用也是可以
如果這個方法前面沒有static 比如 public add(){}
那麼先要person p=new person();
然後用p.add();
類載入器在載入這個類的時候就已經實例化了這個類。
⑺ java static 方法 什麼時候執行
當然是被調用時執行,而static塊是在java虛擬機載入這個類時,就被執行。
⑻ java中static什麼時候使用,知道static是靜態變數
聲明為static的變數實質上就是全局變數。當聲明一個對象時,並不產生static變數的拷貝,而是該類所有的實例變數共用同一個static變數。聲明為static的方法有以下幾條限制: ◆它們僅能調用其他的static 方法。 ◆它們只能訪問static數據。 ◆它們不java中static什麼時候使用,知道static是靜態變數
⑼ java static 一般都什麼時候能用呢
一般情況下,如果有些代碼必須在項目啟動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的. 靜態方法在類載入的時候 就已經載入 可以用類名直接調用
比如main方法就必須是靜態的 這是程序入口
兩者的區別就是:靜態代碼塊是自動執行的;
靜態方法是被調用的時候才執行的.
靜態方法
(1)在Java里,可以定義一個不需要創建對象的方法,這種方法就是靜態方法。要實現這樣的效果,只需要在類中定義的方法前加上static關鍵字。例如:
public static int maximum(int n1,int n2)
使用類的靜態方法時,注意:
a在靜態方法里只能直接調用同類中其他的靜態成員(包括變數和方法),而不能直接訪問類中的非靜態成員。這是因為,對於非靜態的方法和變數,需要先創建類的實例對象後才可使用,而靜態方法在使用前不用創建任何對象。
b 靜態方法不能以任何方式引用this和super關鍵字,因為靜態方法在使用前不用創建任何實例對象,當靜態方法調用時,this所引用的對象根本沒有產生。
(2)靜態變數是屬於整個類的變數而不是屬於某個對象的。注意不能把任何方法體內的變數聲明為靜態,例如:
fun()
{
static int i=0;//非法。
}
(3)一個類可以使用不包含在任何方法體中的靜態代碼塊,當類被載入時,靜態代碼塊被執行,且只被執行一次,靜態塊常用來執行類屬性的初始化。例如:
static
{
}
http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html
⑽ java static方法什麼時候執行
先說一下static方法的特點吧。
方法被定義為static就表示這個方法不需要聲明類的實例即可執行;比如main方法。而某個類成員被定義為static的時候,它就幾乎完全獨立於這個類了。
根據think in java2 還有java參考大全中所述,static方法在類剛剛被載入的時候就執行了。
因此,可以說,static方法是在對程序進行解釋的時候執行。