Static 方法與變數

2021-08-09 20:22:07 字數 2066 閱讀 6354

首先說一下static關鍵字,

1.--用static修飾的成員變數不屬於物件的資料結構;

2.--static變數是屬於類的變數,通常可以通過類名來引用static成員

3.--static成員變數和類的資訊一起儲存在方法區,而不是在堆中;

4.--乙個類的static成員變數只有「乙份」,無論該類建立了多少物件。

通過下圖來理解一下static修飾成員變數的意義。。。

1.——通常的方法都會涉及到對具體物件的操作,這些方法在呼叫時,需要隱式的傳遞物件的引用,

int d = p1.distance(p2);//這個p1等同於這個this

/*呼叫distance方法時,除了傳遞p2引數外,還隱式的傳遞了p1作為引數沒在方法中的this關鍵字即表示該引數

*/

2.——static修飾的方法不需要針對某些物件進行操作,其執行結果僅僅與輸入的引數有關,呼叫時直接類名引用。

/*

該方法在呼叫時,沒有隱式的傳遞物件使用,因此在static方法中不可以使用this關鍵字

*/double c = math.sqrt(3.0*3.0+4.0*4.0);

1.——由於static在呼叫時沒有具體的物件,因此在static方法中不能非static成(物件成員)進行訪問。static方法的作用在於提供一些「

工具方法」和「工廠方法」等、

2.靜態方法是屬於類的方法

下面是我自己的乙個個人筆記

例項化:建立物件的過程

例項:實際的例子-----------物件

class aoo

}成員變數:

1)例項變數-----不用static修飾的

2)靜態變數-----static修飾的

何時用靜態變數,何時用例項變數

class customer

例項變數:屬於物件,乙個物件有乙份

靜態變數:屬於類,所有物件公用這乙份

customer zs = new customer();

zs.customerpwd = 123456;

customer ls = new customer();

ls.customerpwd = 654321;

類的方法中,常常需要對物件的例項變數操作

類的非靜態方法,預設有個隱式的this

類的靜態方法,沒有隱式的this的

class cell

void drop()

void moveleft()

}main()

非靜態方法:---有隱式this

可以直接訪問靜態變數和例項變數

需要訪問例項變數時用

靜態方法:-----沒有隱式this

只能直接訪問靜態變數,不能直接訪問例項變數

不需要訪問例項變數時,只需對引數操作即可

何時用靜態方法,何時用非靜態方法:

靜態方法,只與引數相關,與例項變數有關

arrays.sort(arr);

math.random();

math.sqrt(25);

何時用靜態**塊:

這個是我自己乙個完整**

//static的演示

public class staticdemo

} class moo

//沒有隱式的this

static void test()

}class loo

void show()

static 方法和static 變數

static方法不能直接訪問類內的非static變數和不能呼叫this,super語句分析 大家都知道在static方法中,不能訪問類內非static成員變數和方法。可是原因是什麼呢?這首先要從static方法的特性說起。static方法,即類的靜態成員經常被稱為 成員變數 class member...

全域性變數與static

c 是沒有全域性變數的,c 設計者弄了乙個叫singleton的模式,用static可以當作全域性變數來用。請看下面的類 class class1 眾所周知,我們在主類裡面要想引用這個類,必須先class1 c1 new class1 要想c1.intnum則必須public int intnum而...

static與const成員變數

static 很多公司會喜歡問static的作用是什麼,如果不考慮在類當中的應用,其主要作用有以下三點 1 隱藏 加了static的全域性變數,在其他原始檔中就 看不見 了。也就是說,加了static,可以用來解決不同檔案裡定義了同名的函式或者變數。2 預設初始化為0 對於未初始化的全域性變數和靜態...