title: 软件构造实验六总结
tags: 软件构造笔记
categories: 软件构造笔记
零散知识
Int最大数
It is universally accepted that 在int范围中最大的数为2147483647.在本人设计Ladder这个ADT时,需要记录该梯子上所有猴子中速度最小的,记为这个梯子的最小数。但是应该确保的是,初始化时这个梯子最小速度应该为一个非常非常大的数,即为int范围最大值。
我本人这样写this.minSpeed = 2147483647;
后来查询到,Java中由Integer.MAX_VALUE
表示。不得不叹上一句“这java封装的太好了”。
随机方向和随机速度
emsp;查阅可知,可以利用Java封装好的随机正整数生成器。
private Direction randomDirection() {
Random ran = new Random();
int dirNumber = ran.nextInt(2); // Random number for [0,1]
if (dirNumber == 0) {
return Direction.LtoR; //If the number is 0, the direction is "LtoR".
}
return Direction.RtoL; // Else, the direction is "RtoL"
}
静态变量初始化???
本人的思路是这样的,在生成一个LadderGenerator,生成public的一个List<Ladder>
,然后大家对这个Ladders操作即可。我设置这个List为静态变量。
/**
* This is the Ladder generator which produces many Ladders.
*/
public class Ladders {
public static List<Ladder> ladders = new ArrayList<Ladder>();
public static void getLadders(int n) {
for (int i = 1;i <= n; i++) {
ladders.add(new Ladder(i));
}
}
}
在测试时,出了问题
Ladder l1 = ladders.get(0);
Ladder l2 = ladders.get(1);
Ladder l3 = ladders.get(2);
这时对l1或者其他梯子修改属性,再调用strategy接口中的方法时,会按照未被修改属性的梯子来操作。
并且在该方法中测试l1属性,显示修改过的。但是在具体策略类的方法中就会表现不同?
目前猜测原因:
- 类被加载的时候,普通方法加载到方法区,静态方法和静态字段加载到方法区中的静态区
- 首先静态字段会进行默认初始化。
- 然后静态字段会进行显示初始化。
其中,这个例子很好的演示了这个出人意料的情况的由来。
此外,又学了一招。以往需要访问一个静态变量的时候,需要用[类名].(变量) 的方式访问,比如Client.manyLadders
,而采用静态导入包的方式可以直接访问该包内的静态成员变量。
比如:
import static run.Client.manyLadders;
import static run.Client.logger;
本知识点来自于static关键字的四种应用