static 语句
更新:2007 年 11 月
在类声明中声明新的类初始值设定项。
static identifier {
[body]
}
参数
identifier
必选。包含初始值设定项块的类的名称。body
可选项。组成初始值设定项块的代码。
备注
static 初始值设定项用于在首次使用之前对 class 对象(而不是对象实例)进行初始化。此初始化只出现一次,可用来对带有 static 修饰符的类中的字段进行初始化。
一个 class 可以包含多个与 static 字段声明交错的 static 初始值设定项块。若要将 class 初始化,请按其在 class 体中出现的顺序执行所有 static 块和 static 字段初始值设定项。此初始化在首次引用 static 字段之前执行。
不要将 static 修饰符同 static 语句混淆。static 修饰符表示属于类本身但不属于任何类成员的成员。
示例
下面的示例显示一个简单的 class 声明,其中的 static 初始值设定项用于执行只需进行一次的计算。该示例将计算一次阶乘表。当需要阶乘时,将从该表中读取阶乘。如果程序中多次需要较大的阶乘,此方法则要比递归计算阶乘更快。
static 修饰符用于阶乘方法。
class CMath {
// Dimension an array to store factorial values.
// The static modifier is used in the next two lines.
static const maxFactorial : int = 5;
static const factorialArray : int[] = new int[maxFactorial];
static CMath {
// Initialize the array of factorial values.
// Use factorialArray[x] = (x+1)!
factorialArray[0] = 1;
for(var i : int = 1; i< maxFactorial; i++) {
factorialArray[i] = factorialArray[i-1] * (i+1);
}
// Show when the initializer is run.
print("Initialized factorialArray.");
}
static function factorial(x : int) : int {
// Should have code to check that x is in range.
return factorialArray[x-1];
}
};
print("Table of factorials:");
for(var x : int = 1; x <= CMath.maxFactorial; x++) {
print( x + "! = " + CMath.factorial(x) );
}
该代码的输出为:
Table of factorials:
Initialized factorialArray.
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120