首先說一下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 對於未初始化的全域性變數和靜態...