當前位置:生活全書館 >

綜合知識

> 靜態為什麼方法裡定義靜態變數

靜態為什麼方法裡定義靜態變數

靜態為什麼方法裡定義靜態變數

1、靜態方法要在類被載入的時候就能夠被呼叫,而在靜態方法中定義靜態變數可以使得該變數在類被載入時只初始化一次,而不是每次呼叫靜態方法時重新初始化一次,這樣可以提高程式碼的執行效率。

2、在靜態方法中定義的靜態變數可以被同一類中的所有例項物件所共享,這樣在靜態方法中定義的變數可以在類的任何其他靜態方法或靜態程式碼塊中被訪問和使用。

3、在許多情況下,靜態變數在類的各個方法中都會使用到,為了避免定義多個副本,並且方便統一管理和修改,可以將其定義在靜態方法中。

小編還為您整理了以下內容,可能對您也有幫助:

為什麼要定義靜態變數

static

靜態方法裡

定義的就是靜態的變數,只不過作用域只在方法內。

你可以定義一個全域性的靜態變數。在這個方法中使用。

就可以達到你的計數增長的目的。

JAVA中,靜態方法中呼叫全域性變數時,為什麼全域性變數也要設定成靜態的,這是為什麼呢?

在java中,靜態方法只能呼叫靜態變數,如果你想要在靜態方法呼叫一個變數,那麼這個變數不論是全域性與否,都得設定成靜態。另外在靜態塊中也是一樣的。如static{ }裡面呼叫的變數也必須是靜態的。

c#中為什麼要定義靜態變數和靜態方法

靜態變數和靜態方法是不需要類的例項就可以訪問,比較方便。比如

class Test

{

public void foo(){...}

public static void StaticFoo() {...}

}

// 呼叫foo需要Test的例項

Test test = new Test();

test.foo();

// StaticFoo可直接呼叫

Test.StaticFoo();

相當於C/C++的全域性變數和全域性方法

一般某類裡的靜態方法和函式都是跟這個型別本身有聯絡的

另一方面,C#是物件導向的,所有的函式和方法都必須屬於某個型別

c#中為什麼要定義靜態變數和靜態方法

靜態變數和靜態方法是不需要類的例項就可以訪問,比較方便。比如

class Test

{

public void foo(){...}

public static void StaticFoo() {...}

}

// 呼叫foo需要Test的例項

Test test = new Test();

test.foo();

// StaticFoo可直接呼叫

Test.StaticFoo();相當於C/C++的全域性變數和全域性方法

一般某類裡的靜態方法和函式都是跟這個型別本身有聯絡的

另一方面,C#是物件導向的,所有的函式和方法都必須屬於某個型別

在JAVA中為什麼要申明靜態方法和靜態變數

靜態變數能夠在類的各個物件享,從而實現特定的目的;靜態方法的話,不需要物件就能通過類名呼叫。有這些需求,因此要定義咯。

剛學JAVA,發現 static 靜態方法裡不能定義靜態變數,這是為什麼?

怎麼說了,無論是static修飾的方法還是變數,首先,我們之所以用Static修飾有一個很直接的目的就是訪問方便,當然,方法和變數各有它們的作用,方法的作用是告訴我們怎樣去做具體的事,所以它裡面的變數已經沒有那麼重要了,因為我們的方法具有普適性,對於它裡面的變數的呼叫好像沒有太大的價值,變數只不過是個形式,值都是從外面傳進方法來的。所以方法體裡面的變數一般不加任何修飾符

static函式裡定義static變數

1、方法裡面不能定義靜態變數。由於JAVA規定,方法內定義的都是區域性臨時變數,且由於記憶體分配,會建立一個棧幀儲存區域性變量表、運算元棧,動態鏈棧等,在方法結束後,棧幀會出棧並釋放掉所有區域性變數。

2、靜態變數只能定義為全域性變數。

什麼時候用靜態變數 靜態方法?為什麼要使用靜態變數 、靜態方法?

靜態方法和例項方法的區別主要體現在兩個方面:

在外部呼叫靜態方法時,可以使用"類名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。

靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數和例項方法;例項方法則無此。

下面幾個例子展示了這一區別。

1、呼叫靜態方法示例。

//-----------檔名hasStaticMethod.java,程式編號1-----------------public class hasStaticMethod{//定義一個靜態方法public static void callMe(){System.out.println("This is a static method.");}}

下面這個程式使用兩種形式來呼叫靜態方法。

//-----------檔名invokeStaticMethod.java,2-----------------public class invokeStaticMethod{public static void main(String args[]){hasStaticMethod.callMe(); //不建立物件,直接呼叫靜態方法 hasStaticMethod oa = new hasStaticMethod(); //建立一個物件oa.callMe(); //利用物件來呼叫靜態方法}}

程式3.36兩次呼叫靜態方法,都是允許的,程式的輸出如下:

This is a static method.This is a static method.

允許不建立物件而呼叫靜態方法,是Java為了減少程式設計師呼叫某些常用方法時的麻煩,而允許程式設計師按照傳統的C語言中使用函式的方式來使用方法。典型的例子是前面某些程式中使用"Math.ramdon()"來獲取隨機數。

2、靜態方法訪問成員變數示例。

//-----------檔名accessMember.java,程式編號3.37-----------------class accessMember{private static int sa; //定義一個靜態成員變數private int ia; //定義一個例項成員變數//下面定義一個靜態方法static void statMethod(){int i = 0; //正確,可以有自己的區域性變數sa = 10; //正確,靜態方法可以使用靜態變數otherStat(); //正確,可以呼叫靜態方法ia = 20; //錯誤,不能使用例項變數insMethod(); //錯誤,不能呼叫例項方法}static void otherStat(){} //下面定義一個例項方法 void insMethod(){int i = 0; //正確,可以有自己的區域性變數sa = 15; //正確,可以使用靜態變數ia = 30; //正確,可以使用例項變數statMethod(); //正確,可以呼叫靜態方法}}

本例其實可以概括成一句話:靜態方法只能訪問靜態成員,例項方法可以訪問靜態和例項成員。之所以不允許靜態方法訪問例項成員變數,是因為例項成員變數是屬於某個物件的,而靜態方法在執行時,並不一定存在物件。同樣,因為例項方法可以訪問例項成員變數,如果允許靜態方法呼叫例項方法,將間接地允許它使用例項成員變數,所以它也不能呼叫例項方法。基於同樣的道理,靜態方法中也不能使用關鍵字this。

main()方法是一個典型的靜態方法,它同樣遵循一般靜態方法的規則,所以它可以由系統在建立物件之前就呼叫。

靜態變數作為一個區域性變數是很合適的,它在函式退出後不會失去其本身的值。例如,有一個要被呼叫很多次的函式,它的一部分功能就是計算自己被呼叫的次數。你不能用一個簡單的區域性變數來實現這部分功能,因為每次進入該函式時,這個變數都沒有被初始化。如果把這個計數變數說明為靜態的,那麼它就會象一個全域性變數那樣保留自己的當前值。

那麼為什麼不直接使用一個全域性變數呢?你可以使用一個全域性變數,而且這樣做沒有錯誤。問題是使用了大量全域性變數的程式維護起來很麻煩,尤其是有許多函式都各自訪問一個全域性變數的程式。再說一遍,這樣做沒有錯誤,這只是一個程式設計和可讀性是否好的問題。如果你把這樣的變數說明為靜態的,你就可以提醒自己(或者其它可能讀你的程式的人)它是區域性變數,但要象全域性變數那樣被處理(保留自己的值)。如果你把它說明為全域性的,那麼讀這個程式的人一定會認為有很多地方要引用它,儘管實際上並不是這樣。

總而言之,當你需要一個能保持自己的值的區域性變數時,使用靜態變數是一種好的程式設計習慣。

靜態方法就不再多解釋了,道理差不多

靜態方法裡面為什麼不能宣告靜態變數

static是用來修飾成員變數和成員方法,也可以形成靜態static程式碼塊。

不能在方法裡宣告一個變數為static的。

static修飾的變數,任何一個類的例項物件都可以訪問,是共享的。

而方法中宣告的變數都是區域性的,方法執行完後就要銷燬,釋放快取空間的。

靜態方法和靜態變數的目的是什麼?

一般靜態變數都是公用的、全域性的,程式一啟動就會在記憶體開闢一塊空間,存放它們。靜態的不必例項化就能直接使用,是說在沒有生成任何物件時就能運用該方法,所以靜態方法裡不能對非靜態的成員變數做操作。一般靜態方法操作靜態成員變數或全域性變數。

為什麼要定義靜態變數

static

靜態方法裡

定義的就是靜態的變數,只不過作用域只在方法內。

你可以定義一個全域性的靜態變數。在這個方法中使用。

就可以達到你的計數增長的目的。

JAVA中,靜態方法中呼叫全域性變數時,為什麼全域性變數也要設定成靜態的,這是為什麼呢?

在java中,靜態方法只能呼叫靜態變數,如果你想要在靜態方法呼叫一個變數,那麼這個變數不論是全域性與否,都得設定成靜態。另外在靜態塊中也是一樣的。如static{ }裡面呼叫的變數也必須是靜態的。

c#中為什麼要定義靜態變數和靜態方法

靜態變數和靜態方法是不需要類的例項就可以訪問,比較方便。比如

class Test

{

public void foo(){...}

public static void StaticFoo() {...}

}

// 呼叫foo需要Test的例項

Test test = new Test();

test.foo();

// StaticFoo可直接呼叫

Test.StaticFoo();

相當於C/C++的全域性變數和全域性方法

一般某類裡的靜態方法和函式都是跟這個型別本身有聯絡的

另一方面,C#是物件導向的,所有的函式和方法都必須屬於某個型別

c#中為什麼要定義靜態變數和靜態方法

靜態變數和靜態方法是不需要類的例項就可以訪問,比較方便。比如

class Test

{

public void foo(){...}

public static void StaticFoo() {...}

}

// 呼叫foo需要Test的例項

Test test = new Test();

test.foo();

// StaticFoo可直接呼叫

Test.StaticFoo();相當於C/C++的全域性變數和全域性方法

一般某類裡的靜態方法和函式都是跟這個型別本身有聯絡的

另一方面,C#是物件導向的,所有的函式和方法都必須屬於某個型別

在JAVA中為什麼要申明靜態方法和靜態變數

靜態變數能夠在類的各個物件享,從而實現特定的目的;靜態方法的話,不需要物件就能通過類名呼叫。有這些需求,因此要定義咯。

剛學JAVA,發現 static 靜態方法裡不能定義靜態變數,這是為什麼?

怎麼說了,無論是static修飾的方法還是變數,首先,我們之所以用Static修飾有一個很直接的目的就是訪問方便,當然,方法和變數各有它們的作用,方法的作用是告訴我們怎樣去做具體的事,所以它裡面的變數已經沒有那麼重要了,因為我們的方法具有普適性,對於它裡面的變數的呼叫好像沒有太大的價值,變數只不過是個形式,值都是從外面傳進方法來的。所以方法體裡面的變數一般不加任何修飾符

static函式裡定義static變數

1、方法裡面不能定義靜態變數。由於JAVA規定,方法內定義的都是區域性臨時變數,且由於記憶體分配,會建立一個棧幀儲存區域性變量表、運算元棧,動態鏈棧等,在方法結束後,棧幀會出棧並釋放掉所有區域性變數。

2、靜態變數只能定義為全域性變數。

什麼時候用靜態變數 靜態方法?為什麼要使用靜態變數 、靜態方法?

靜態方法和例項方法的區別主要體現在兩個方面:

在外部呼叫靜態方法時,可以使用"類名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。

靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數和例項方法;例項方法則無此。

下面幾個例子展示了這一區別。

1、呼叫靜態方法示例。

//-----------檔名hasStaticMethod.java,程式編號1-----------------public class hasStaticMethod{//定義一個靜態方法public static void callMe(){System.out.println("This is a static method.");}}

下面這個程式使用兩種形式來呼叫靜態方法。

//-----------檔名invokeStaticMethod.java,2-----------------public class invokeStaticMethod{public static void main(String args[]){hasStaticMethod.callMe(); //不建立物件,直接呼叫靜態方法 hasStaticMethod oa = new hasStaticMethod(); //建立一個物件oa.callMe(); //利用物件來呼叫靜態方法}}

程式3.36兩次呼叫靜態方法,都是允許的,程式的輸出如下:

This is a static method.This is a static method.

允許不建立物件而呼叫靜態方法,是Java為了減少程式設計師呼叫某些常用方法時的麻煩,而允許程式設計師按照傳統的C語言中使用函式的方式來使用方法。典型的例子是前面某些程式中使用"Math.ramdon()"來獲取隨機數。

2、靜態方法訪問成員變數示例。

//-----------檔名accessMember.java,程式編號3.37-----------------class accessMember{private static int sa; //定義一個靜態成員變數private int ia; //定義一個例項成員變數//下面定義一個靜態方法static void statMethod(){int i = 0; //正確,可以有自己的區域性變數sa = 10; //正確,靜態方法可以使用靜態變數otherStat(); //正確,可以呼叫靜態方法ia = 20; //錯誤,不能使用例項變數insMethod(); //錯誤,不能呼叫例項方法}static void otherStat(){} //下面定義一個例項方法 void insMethod(){int i = 0; //正確,可以有自己的區域性變數sa = 15; //正確,可以使用靜態變數ia = 30; //正確,可以使用例項變數statMethod(); //正確,可以呼叫靜態方法}}

本例其實可以概括成一句話:靜態方法只能訪問靜態成員,例項方法可以訪問靜態和例項成員。之所以不允許靜態方法訪問例項成員變數,是因為例項成員變數是屬於某個物件的,而靜態方法在執行時,並不一定存在物件。同樣,因為例項方法可以訪問例項成員變數,如果允許靜態方法呼叫例項方法,將間接地允許它使用例項成員變數,所以它也不能呼叫例項方法。基於同樣的道理,靜態方法中也不能使用關鍵字this。

main()方法是一個典型的靜態方法,它同樣遵循一般靜態方法的規則,所以它可以由系統在建立物件之前就呼叫。

靜態變數作為一個區域性變數是很合適的,它在函式退出後不會失去其本身的值。例如,有一個要被呼叫很多次的函式,它的一部分功能就是計算自己被呼叫的次數。你不能用一個簡單的區域性變數來實現這部分功能,因為每次進入該函式時,這個變數都沒有被初始化。如果把這個計數變數說明為靜態的,那麼它就會象一個全域性變數那樣保留自己的當前值。

那麼為什麼不直接使用一個全域性變數呢?你可以使用一個全域性變數,而且這樣做沒有錯誤。問題是使用了大量全域性變數的程式維護起來很麻煩,尤其是有許多函式都各自訪問一個全域性變數的程式。再說一遍,這樣做沒有錯誤,這只是一個程式設計和可讀性是否好的問題。如果你把這樣的變數說明為靜態的,你就可以提醒自己(或者其它可能讀你的程式的人)它是區域性變數,但要象全域性變數那樣被處理(保留自己的值)。如果你把它說明為全域性的,那麼讀這個程式的人一定會認為有很多地方要引用它,儘管實際上並不是這樣。

總而言之,當你需要一個能保持自己的值的區域性變數時,使用靜態變數是一種好的程式設計習慣。

靜態方法就不再多解釋了,道理差不多

靜態方法裡面為什麼不能宣告靜態變數

static是用來修飾成員變數和成員方法,也可以形成靜態static程式碼塊。

不能在方法裡宣告一個變數為static的。

static修飾的變數,任何一個類的例項物件都可以訪問,是共享的。

而方法中宣告的變數都是區域性的,方法執行完後就要銷燬,釋放快取空間的。

靜態方法和靜態變數的目的是什麼?

一般靜態變數都是公用的、全域性的,程式一啟動就會在記憶體開闢一塊空間,存放它們。靜態的不必例項化就能直接使用,是說在沒有生成任何物件時就能運用該方法,所以靜態方法裡不能對非靜態的成員變數做操作。一般靜態方法操作靜態成員變數或全域性變數。

標籤: 變數 靜態
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/zonghezhishi/4l0vrz.html