SC实验六


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属性,显示修改过的。但是在具体策略类的方法中就会表现不同?
目前猜测原因:

  1. 类被加载的时候,普通方法加载到方法区,静态方法和静态字段加载到方法区中的静态区
  2. 首先静态字段会进行默认初始化。
  3. 然后静态字段会进行显示初始化。

其中,这个例子很好的演示了这个出人意料的情况的由来。

 此外,又学了一招。以往需要访问一个静态变量的时候,需要用[类名].(变量) 的方式访问,比如Client.manyLadders,而采用静态导入包的方式可以直接访问该包内的静态成员变量。
比如:

import static run.Client.manyLadders;
import static run.Client.logger;

本知识点来自于static关键字的四种应用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值