以下是两段简单的代码,但有几个地方不是很懂,请帮忙解释下,谢谢~~~~第一段:
import java.util.Random;public class MagicHat{
static int maxRabbits = 5;
static Random select = new Random();

public MagicHat(String hatName){
this.hatName = hatName;
  rabbits = new Rabbit[1 + select.nextInt(maxRabbits)];
  
  for(int i = 0; i<rabbits.length; i++){
   rabbits[i] = new Rabbit();
  }
}

public String toString(){
String hatString = "\n" + hatName + " contains:\n";

for(Rabbit rabbit : rabbits){
hatString += "  " + rabbit;
}
return hatString;
}
private String hatName;
private Rabbit rabbits[];

static class Rabbit{
static private String[] rabbitNames = {"Floppsy", "Moppsy", "Gnasher", "Thumper"};
static private int[] rabbitNamesCount = new int[rabbitNames.length];
private String name;

public Rabbit(){
int index = select.nextInt(rabbitNames.length);
name =  rabbitNames[index] + (++rabbitNamesCount[index]); //问题:(++rabbitNamesCount[index])这段是什么意思??rabbitNamesCount只是个数组变量,他自加1我就看不懂,更别说它后面居然输出数字。
}

public String toString(){
return name;
}
}
}第二段:
public class TryNestedClass{
static public void main(String[] args){
System.out.println(new MagicHat("Gray Topper"));  //问题:这里的new MagicHat()是创建对象?还是别的什么?完全看不懂
System.out.println(new MagicHat("Black Topper"));
System.out.println(new MagicHat("Baseball Cap"));
}
}

解决方案 »

  1.   

    ++rabbitNamesCount[index]不是数组名+1,而是rabbitNamesCount[index]+1
    new MagicHat()创建对象
      

  2.   

    name =  rabbitNames[index] + (++rabbitNamesCount[index]);
    问题1:   你直接把它当成 ++i  就可以了..  rabbitNameCount[index] 只是一个数字而已.
    System.out.println(new MagicHat("Gray Topper")); 问题3: 这里是在创建对象.  调用了  MagicHat(String hatName) 构造方法.. 这种构造方法有一个不好的地方是  不能控制对象的生命周期.  
      

  3.   

    只知道第二个new了就是创建对象,创建后直接用,没赋给其他的变量接收
      

  4.   

    感谢楼上几位的解答,补充几个问题
    问题1:
    (++rabbitNamesCount[index]) 这里的 rabbitNamesCount[index]仅仅只是一个数组,而且还是一个没有数据的数组,它是怎么
    能显示出一个数字来的?难道是 toString() 方法将 index 索引值转换成了数字(或者转换它的下标?)??那真神奇,电脑是怎么去
    转换这东西的?问题2:
    for(Rabbit rabbit : rabbits){//Rabbit是嵌套的类。rabbit这里是Rabbit的类变量。rabbits是个只有元素数,没有实际数据的数组
    hatString += "  " + rabbit; //这个不是应该根据rabbits的数组元素来,决定循环的次数的吗?但是结果是每次调用,只循环了一次。
    问题3
    整段代码要显示嵌套类的内容,但是我却不知道在哪里调用了嵌套类Rabbit,难道是上面的for循环??为什么呢?问题4
    这段代码中,最后通过toString来显示类对象,它在哪里被调用了?