如下代码执行顺序为什么是这样的呢?到底Java的块,静态块,构造函数,继承的执行先后顺序是怎样的呢??郁闷中···public class Test
{
public static void main(String []agrs)
{
Son son = new Son();
}
}class Super
{
public Super()
{
System.out.print("A\t");
}
{
System.out.print("B\t");
}
static
{
System.out.print("C\t");
}
}class Son extends Super
{
public Son()
{
System.out.print("D\t");
}
{
System.out.print("E\t");
}
static
{
System.out.print("F\t");
}
}

解决方案 »

  1.   

    java首先运行的肯定是main方法了,在楼主的程序里,先调用子类的son方法,因为son方法是继承了父类方法的,而且方法中没有引用父类的对象,即调用super():方法,所以java会默认在你的son方法的第一行语句中添加语句 super();这样就开始执行父类的语句了...接下来就一步步执行就好了啊~
    推荐一个博客文章,有空自己研究一下吧~写的很详细
    http://hi.baidu.com/injava/blog/item/ce9fae0e27447ce137d1222b.html
      

  2.   

    静态的东西是属于类的,非静态的东西是属于实例的。
    静态的先执行,然后才是非静态的。
    在上例中,还要考虑继承的问题。首先是父类静态 --> C
    然后是子类静态 --> F非静态区块可以看作是构造函数中执行完父类构造函数后的第一部分。(构造函数第一行有一个默认的super()调用,就是调用父类构造函数)。这个时候执行父类构造函数:
    父类非静态区块 --> B
    父类构造函数块 --> A然后是子类构造函数:
    子类非静态区块 --> E
    子类构造函数块 --> D总结一下就是:
    C F B A E D值得注意的是,静态的东西只会执行一次,就是在类加载的时候。
    如果我们在上例中修改main函数为:public static void main(String[] agrs) {
    Son son = new Son();
    Son son2 = new Son();
    }
    这个时候的执行结果为:
    C F B A E D B A E D 可以看到第二次创建Son实例的时候,静态的东西不会再次执行。
      

  3.   

    多谢1,2楼拉!
    原来这样,《JAVA 2》上没讲详细。呵呵```
      

  4.   

    呵呵,惭愧呀,刚上CSDN,没多少分,以后再谢啦!呵呵···非常感谢。