導航:首頁 > 編程語言 > 靜態方法和實例方法java

靜態方法和實例方法java

發布時間:2021-02-27 22:11:30

⑴ 類中靜態方法和實例方法的區別

1、調用方式上

靜態方法依賴於類,通過類.靜態方法調用;實例方法依賴於類的對象,需要創建對象後,對象.實例方法使用

2、使用上

實例方法內部不能定義靜態變數,會出現編譯錯誤;實例方法可以直接調用靜態方法;靜態方法內部可以定義和使用實例變數,靜態方法無法直接調用實例方法(因靜態方法載入時類還沒有實例化,實例方法依賴於類的對象)

3、靜態方法和實例方法的內存分配問題

一般認為靜態方法常駐內存,實例方法只有在使用時才分配內存。但事實上,是一樣的,都是在類被載入時常駐內存。static方法和non-static方法在創建實例對象時,屬性的值對各個對象各不相同(每個實例對象的所有欄位在內存中有一個拷貝,用於區分操作哪個對象的欄位),new一個實例時,會把實例屬性放在GCHeap裡面,同時new的對象放在堆棧上,堆棧指針指向剛才拷貝的的內存地址;而靜態方法中的靜態欄位只有一份;對於static和non-static方法代碼都是一樣的,所以只需要一份代碼,佔用一份內存空間。調用速度上因實例方法需要實例化分配內存,靜態方法則不用,故靜態方法會快一點,但也可忽略不計

4、區分靜態方法和實例方法的原因

早期結構化編程幾乎所有方法都是靜態方法,引入實例化方法的概念是在面向對象概念出現以後,區分靜態方法和實例方法不能單單從性能上理解。創建c++、java、c#這樣面向對象語言的大師引入實例化方法一定不是要解決什麼性能、內存的問題,而是為了讓開發更加模式化、面向對象化。這樣說的話,靜態方法和實例化方式的區分是為了解決模式的問題

5、適用場景

靜態方法:一個方法與類的對象無關,如工具類等

實例方法:一個方法依賴於類的對象;多線程場景下,如果靜態方法中含有靜態變數,如果對靜態變數進行更改操作易造成線程安全問題

6、靜態方法與單例模式

如果一個方法與對象的實例無關用靜態方法,反之採用實例方法,但如果方法和對象的實例有關,又想維護一份實例時,需要用單例模式。如系統運行時,需要載入一些的配置和屬性,是公共的,需要在整個生命周期存在,只需要一份就可以,但此時這些配置和屬性又是通過面向對象的編碼方式得到的,雖然用靜態方法也能解決,但最好的方式是採用單例模式

⑵ Java中建立實例對象和使用靜態方法分別有什麼好處

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

在外部調用靜態方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實例方法只有後面這種方式。也就是說,調用靜態方法可以無需創建對象。

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

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

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()方法是一個典型的靜態方法,它同樣遵循一般靜態方法的規則,所以它可以由系統在創建對象之前就調用。

⑶ java靜態方法(方法前冠以static)和實例方法(未冠以static)的區別

靜態方法(方法前冠以static)和實例方法(前面未冠以static)的區別

調用靜態方法或說類方法時,可以使用類名做前綴,也可以使用某一個具體的對象名;通常使用類名。
非static的方法是屬於某個對象的方法,而static的方法是屬於整個類的,不被任何一個對象單獨擁有;
由於static方法是屬於整個類的,所以它不能操縱和處理屬於某個對象的成員變數,而只能處理屬於整個類的成員變數,也即,static方法只能處理static域或靜態方法。實例方法可以訪問實例域, 靜態域或靜態方法, 記住都行。
聲明為static的方法有以下幾條限制: 1.它們僅能調用其他的static方法。
2.它們只能訪問static數據。
3.它們不能以任何方式引用this或super(關鍵 字super與繼承有關,在下一章中描述)。
static method Have No this Reference
All instance methods have a hidden parameter—this
So,

Static method can』t access instance methods and fields; it can only
invoke other static class
members.It can access class members only.
instance can use static method.
Instance methods:
If a method is declared without the static modifier keyword,
that method is known as an instance method. Instance methods
are associated with objects – not classes.
It can access either instance or class members.

本章源碼

class StaticExa {
static int a = 4;
static int b = 9;
static void call() {
System.out.println("a = " + a);//靜態方法可以訪問靜態屬性
}
}
public class Test {
static int c = 43;
public static void main(String args[]) {
/*剛運行到這一步時,debug觀察,StaticExa.a的值就等於42,Test.c的值就等於43,
說明系統在我們的程序一開始時,就會給所有的類變數賦值。如果是對象參考, 就是null,
見photoshop的例子*/

。。。。。。。。。。。。。。。。詳情網上找「馬克-to-win」,參考他的網站或他的網路空間:java第2章的內容

⑷ Java靜態方法和實例方法在內存的分布情況

像類、靜態(static)變數還有代碼塊都存儲在方法區里,棧中存儲的是靜態方法、實例方法和變數,堆中存儲的是實例對象和實例變數。

⑸ java 調用靜態方法和實例方法的區別

在外部調用靜態方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法內名"的方式。而實例容方法只有後面這種方式。也就是說,調用靜態方法可以無需創建對象。
靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問實例成員變數和實例方法;實例方法則無此限制。

⑹ Java中靜態方法和實例方法的區別

從使用上來來說,主要有源3點區別: 1、在外部調用靜態方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實例方法只有後面這種方式。也就是說,調用靜態方法可以無需創建對象。 2、靜態方法在訪問本類的成員時

⑺ java靜態方法和實例方法的區別

靜態方法是用來操作這個類型的,方法被該類的所有實例共享。
而實例方內法用來操作容單個實例,不被該類所有實例共享。

靜態方法中不能調用實例方法,也不能訪問實例變數。
實例方法可以調用靜態方法,也能訪問靜態變數。

總之靜態方法對應的是類型,即Class,類。但是實例方法對應的是實例,即object,對象。

⑻ java 靜態方法和實例方法的區別

調用靜態方法,以"類名.方法名"的形式,或者用"對象名.方法名"的形式。
但是實例方法只有後面方式

靜態方法只允許訪問靜態成員。

閱讀全文

與靜態方法和實例方法java相關的資料

熱點內容
遍歷本地文件內容 瀏覽:610
大數據互聯網測試 瀏覽:233
首營供應商提供哪些資料文件 瀏覽:386
經典風月影視 瀏覽:666
生孩子電影 瀏覽:667
iphone中音樂怎麼刪除 瀏覽:542
關於愛情韓劇電影免費觀看 瀏覽:941
無保qq申訴上保 瀏覽:215
蘋果6splussd卡 瀏覽:802
庫樂隊app顯示19是什麼意思 瀏覽:701
言言直播的官方網站是多少 瀏覽:340
啄木鳥十大電影女同天堂 瀏覽:507
iris女主扮演者 瀏覽:144
51自學網cor視頻教程 瀏覽:243
怎麼用ps把臉p黑教程 瀏覽:223
播放iso藍光原盤app有哪些 瀏覽:115
尋呼機地址碼編程是什麼意思 瀏覽:947
數據包安全未知為什麼解壓不出來 瀏覽:69
愛人女主角 瀏覽:623
古龍小說下載 瀏覽:242

友情鏈接