靜態域中的域是什麼意思?
- 2023-01-23
靜態成員變數可以脫離物件而存在,是類本身的屬性。所以對於任何物件來說,這個靜態成員都是存在的,類似物件間的全域性屬性。
相關資料
1、概念
在類定義中,如果一個域前面有static修飾符,則該域屬於整個類,而不單單屬於類的某個物件。這種域叫做靜態域(static fields),而不加static修飾符的域,做作非靜態域(non-static fields)。
可以為Point類增加一個靜態域numberOfPoints,代表已經用Point類生成的Point類的物件個數,其初值不妨設為0:
static int numberOfPoints = 0;這樣,numberOfPoints就是一個靜態域。編譯器在編譯原始碼時,就會為該類產生惟一的numberOfPoints域。即使沒有用Point類生成任何具體的物件,該numberOfPoints域也存在。今後該類的所有物件,都將共享這個域。
【例4】將例3的PointDemo2。java中的Point類增加一個靜態域numberOfPoints,代表已經用Point類生成的Point類的物件個數,改寫如下。為醒目起見,對改寫的語句增加了註釋。
class Point {
//增加了一個靜態域numberOfPoints,初值為0
static int numberOfPoints = 0;
int x;
int y;
//兩個建構函式如下,其中專門對numberOfPoints進行了加1操作
public Point(int newX, int newY) {
x = newX;
y = newY;
numberOfPoints++;
}
public Point() {
x = 0;
y = 0;
numberOfPoints++;
}
//以下方法不變
void setX(int newX) {
x = newX;
}
void setY(int newY) {
y = newY;
}
int getX() {
return x;
}
int getY() {
return y;
}
void printStates() {
System。out。println(“x=”+x+“, y=”+y);
}
}那麼,該怎樣使用靜態域?靜態域又有什麼用處呢?
2、使用靜態域
【例5】使用例4的Point類改寫PointDemo2。java為PointDemo3。java。為醒目起見,對改寫的語句增加了註釋。
import java。io。*;
//主類名自然變成了PointDemo3
class PointDemo3 {
public static void main(String[ ] args) {
Point p1 = new Point(23, 94);
p1。printStates();
System。out。println(“現在一共有” + Point。numberOfPoints + “個點”);
Point p2 = new Point();
p2。printStates();
System。out。println(“現在一共有” + Point。numberOfPoints + “個點”);
}
}
class Point {
……//例4中的Point類,為節省篇幅略
}程式的執行結果為:
x=23, y=94
現在一共有1個點
x=0, y=0
現在一共有2個點簡要講解:例5演示了靜態域的使用方法和簡單作用。在編譯程式時,系統為靜態域numberOfPoints分配記憶體空間,並賦值為0。在main方法中,首先聲明瞭一個Point類的引用物件p1,它呼叫Point類的建構函式Point()生成一個具體物件,在建構函式Point()中有這樣一句話:
numberOfPoints++;它把numberOfPoints自加1,所以在執行第一句:
System。out。println(“現在一共有” + Point。numberOfPoints + “個點”);時,系統輸出:
現在一共有1個點程式又聲明瞭一個Point類的引用物件p2,它呼叫Point類的建構函式Point(int, int)生成一個具體物件,在該建構函式Point()中也有這樣一句話:
numberOfPoints++;它又把numberOfPoints自加1,所以在執行第二句:
System。out。println(“現在一共有” + Point。numberOfPoints + “個點”);時,系統輸出:
現在一共有2個點可見,numberOfPoints域儲存了系統生成的點的個數,它是靜態域,被類的所有物件所共享,在用類生成具體物件前,就已經為它分配記憶體空間了;而x、y則是非靜態域,只有當用類生成具體物件時,才為非靜態域分配記憶體空間,並且類的每個物件各有一份。
本題的類和物件的各種域的形象表示如下圖所示。
在程式中是這樣使用numberOfPoints域的:
Point。numberOfPoints它體現了使用靜態域的一般格式:
類名。靜態域它使用了點運算子“。”。使用非靜態域的格式則是:
物件名。非靜態域例如,可以這樣輸出p1物件的x域值:
System。out。println(p1。x);點運算子“。”用於引用物件或類的域或方法。例如可以這樣呼叫方法:
System。out。println(p1。getX());它輸出p1物件的x域值。又如:
p2。printStates();它呼叫p2的printStates()方法,輸出p2的x、y域值。
注意,也可以用“物件名。靜態域”的形式使用靜態域,如可以這樣寫:
System。out。println(“現在一共有” + p2。numberOfPoints + “個點”);但一般不提倡這樣使用靜態域,因為無法從呼叫格式看出一個域是否是靜態域。
非靜態域則不能使用“類名。非靜態域”的形式,原因很簡單:非靜態域屬於各物件而不屬於類。
3、最終域
如果一個類的域被宣告為final,則它的取值在程式的整個執行過程都不會改變。如果在程式中試圖改變其值,則會出現編譯錯誤。
final修飾符經常和static修飾符結合使用,用於定義常量。例如,下面的變數宣告定義了PI常量,其值約等於圓周率:
static final double PI = 3。141592653589793;這樣定義的常量不能重新賦值,否則會發生編譯錯誤。一般來說,常量名應該全大寫。如果名字包含多個英文單詞,則各單詞之間用下劃線(_)分隔。
如果一個原資料型別或一個字串被定義為常量,並且在編譯時就知道它的值,編譯器會在程式碼中用具體值取代常量出現的位置。這叫做編譯時常量(compile-time constant)。如果外界常量的值發生了改變(例如圓周率變成了3。95),則在重新定義常量後,需要重新編譯使用該常量的所有類。
為了節省空間,常量一般宣告為static final或final static。
http://www。itsway。net/java/java030203。aspx
域可以理解為記憶體空間。域(Domain)是Windows網路中獨立執行的單位,域之間相互訪問則需要建立信任關係(即Trust Relation)。信任關係是連線在域與域之間的橋樑。當一個域與其他域建立了信任關係後,2個域之間不但可以按需要相互進行管理,還可以跨網分配檔案和印表機等裝置資源,使不同的域之間實現網路資源的共享與管理。
域既是 Windows 網路作業系統的邏輯組織單元,也是Internet的邏輯組織單元,在 Windows 網路作業系統中,域是安全邊界。域管理員只能管理域的內部,除非其他的域顯式地賦予他管理許可權,他才能夠訪問或者管理其他的域;每個域都有自己的安全策略,以及它與其他域的安全信任關係。
域:域是一種管理邊界,用於一組計算機共享共用的安全資料庫,域實際上就是一組伺服器和工作站的集合。
域在檔案系統中,有時也稱做“欄位”,是指資料中不可再分的基本單元。一個域包含一個值。如學生的名字等。可以透過資料型別(如二進位制、字元、字串等)和長度(佔用的位元組數)兩個屬性對其進行描述。
域,在WORD文件中是一種可以發生變化的資料。他在頁面檢視中,與一般的文字看不出有什麼區別,但是,當游標移入域中,就會發現,整體域的底紋顏色變成灰色(約灰色-30%)
域可以理解為記憶體空間,因為靜態域被類的所有物件所共享,在用類生成具體物件前,就已經為它分配記憶體空間了
靜態域就是這裡面的變數可以不用類來呼叫就可以直接使用,相當於一個常數
上一篇:懂小姐的歌詞~急需
下一篇:人類社會是怎樣發展的?