今天编写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也会随着更新。