今天編寫AI程序時遇到一個問題,關鍵代碼如下
public class Auto{
static Cell[][] temp = new Cell[Tetris.ROWS][Tetris.COLS];
static{
try{
temp = (Cell[][])Tetris.wall.clone();
}catch(Exception e){
}
}
static void display(){
System.out.println(temp[19][0]);
}
}
測試時僅在KeyAdapter中引用Auto.display();,但隨着Tetris.wall[][]的更新,temp[][]也隨着更新,十分疑惑。
經過探究,得知靜態代碼區只執行一次,這是指類被加載和釋放過程之間,但在這裏每一次使用Auto.display();類會被重新加載一次,所以temp也會隨着更新。