一个基础练习题,初学者不会求高手解惑

一个基础练习题,菜鸟不会求高手解惑!Java code class HeapQuiz {int id 0/*** @param args*/public sta

一个基础练习题,菜鸟不会求高手解惑!

Java code
 class HeapQuiz {    int id = 0;    /**     * @param args     */    public static void main(String[] args) {                int x = 0;        HeapQuiz[] hq = new HeapQuiz[5];        while(x<3){            hq[x] = new HeapQuiz();            hq[x].id = x;            x = x+1;        }        hq[3] = hq[1];                hq[4] = hq[1];                hq[3] = null;        hq[4] = hq[0];        hq[0] = hq[3];        hq[3] = hq[2];        hq[2] = hq[0];                // TODO 自动生成方法存根    }}


题目要求引用变量hq[0],hq[1],hq[2],hq[3],hq[4]和堆对象id=0,id=1,id=2哪个几个是相对应起来的?

我不明白ID=1,2是怎么来的?因为id根本就没有增加过啊。

这里面貌似就hq[0].id=0,hq[1].id=1,hq[2].id=2,其中id始终没有变过。

还有我看的书里面经常有这样2个不同的定义方式
Java code
class a{             int x;           public static void main(){           }}

Java code
class a{public static void main(){}}class b{int x;}


这2个有啥不同的?
运行起来也不一样,烦躁啊。书上又不说清楚,有时候搞的我都不知道哪个是哪个,怎么用了。

求高手解惑。谢谢。

[解决办法]
题目要求引用变量hq[0],hq[1],hq[2],hq[3],hq[4]和堆对象id=0,id=1,id=2哪个几个是相对应起来的?
hq[0] -- null
hq[1] -- id 1
hq[2] -- null
hq[3] -- id 2
hq[4] -- id 0

我不明白ID=1,2是怎么来的?因为id根本就没有增加过啊。
x = x+1 ;这里递增的

这里面貌似就hq[0].id=0,hq[1].id=1,hq[2].id=2,其中id始终没有变过。
hq[x].id = x; //这里的id=x,而x在上面说的地方递增,所以相当于id递增


这2个有啥不同的?
运行起来也不一样,烦躁啊。书上又不说清楚,有时候搞的我都不知道哪个是哪个,怎么用了。
第一种只有一个类,它有一个属性,并且带有一个main方法
第二种有两个类,第一个是带有main方法的类,第二个类是带有一个属性的类,相当于第一种的分解,即把第一种的main方法写到一个单独的类
运行起来,当然是以主类名为启动类,所以稍微不同
第一种一般是开发一个类为了方便直接在该类写个main方法作为测试
第二种一般是正式用的类,不带main方法,用另一个带main方法的启动类来测试它