對象通常是有狀態(tài)的,比如一個(gè)員工有姓名、年齡等字段。我們一般使用構(gòu)造器對對象進(jìn)行狀態(tài)設(shè)置,本文將介紹使用靜態(tài)和實(shí)例初始化塊來對對象進(jìn)行狀態(tài)初始化的工作。
首先我們來看一個(gè)簡單的例子,代碼如下:
public class SmallSquares
{
PRivate static final int LIMIT = 10;
private static final int[] square = new int[LIMIT];
public SmallSquares()
{
for (int i = 0; i < LIMIT; i++)
{
square[i] = i * i;
}
}
public static int getSquare(int i)
{
if (i < 0 i > LIMIT)
{
System.out.println("Error:the i should between 0 to 10");
return -1;
}
return square[i];
}
public static void main(String[] args)
{
new SmallSquares();
System.out.println("3 squared is " + getSquare(3));
}
}
這個(gè)小程序用來計(jì)算0-10的平方,這個(gè)程序是在構(gòu)造器中對數(shù)組進(jìn)行初始化的。其實(shí)這個(gè)構(gòu)造器的唯一目的就是來初始化這個(gè)數(shù)組的。可是我們仔細(xì)考慮一下,這個(gè)類的功能比較簡單,內(nèi)部的狀態(tài)也不復(fù)雜。但是假如要依靠構(gòu)造器來初始化狀態(tài)的話,顯然不合適。我們每次必須要首先調(diào)用SmallSquares()才可以讓程序工作,不然會出現(xiàn)NullPointerException。考慮用static初始化塊來完成這個(gè)功能,使用它的話我們就可以不用構(gòu)造器了,由于是static的,因此只會被執(zhí)行一次。下面給出優(yōu)化過的代碼,注重綠色部分。
public class SmallSquares
{
private static final int LIMIT = 10;
private static final int[] square = new int[LIMIT];
static
{
for (int i = 0; i < LIMIT; i++)
{
square[i] = i * i;
}
}
public static int getSquare(int i)
{
if (i < 0 i > LIMIT)
{
System.out.println("Error:the i should between 0 to 10");
return -1;
}
return square[i];
}
public static void main(String[] args)
{
new SmallSquares();
System.out.println("3 squared is " + getSquare(3));
}
}
新聞熱點(diǎn)
疑難解答
圖片精選