java代码在编译运行时,哪些先进行,哪些后进行: 
  1.静态的部分先运行,然后是构造器; 
  2.父类的先于子类进行。 静态的部分先运行,然后是构造器,就是静态部分先初始化,然后再构造函数??

解决方案 »

  1.   

    public class Test{
           static{
            int i=100;
            System.out.println("i:"+i);
        }
        public Test(){
           System.out.println("in the Test()");
        }   public static void main(String []args){
            Test t = new Test();
      }
    }
    执行一下看看自己就明白了.
      

  2.   

    静态部分,是在类被加载到内存中的时候初始化的,静态块、静态变量都是在这个时候初始化的。
    静态方法跟成员方法一样,都是在被调用时运行的。构造函数是在new之后被调用的,也就是说,在堆开了内存空间后再调用的构造函数。构造子类时,会查询父类是否被加载到内存。
      

  3.   

    package test;public class TestCommon {    static int age = 21;    String name = "zhao";    TestCommon() {
            System.out.println("TestCommon()   " + name);
            this.name = "kimi";
            System.out.println("TestCommon()   " + name);
        }    static {
            System.out.println("static " + age);
        }    {
            System.out.println("static " + name);
        }    /**
         * @param args
         */
        public static void main(String[] args) {
            new TestCommon();
        }}
      

  4.   

    前两天有一个很经典的帖子的
    http://topic.csdn.net/u/20080402/21/6e9dc1dc-6ae5-4f41-a331-bbc74eb5b465.html
    看12楼应该是
    1:利用构造方法分配内存空间
    2:静态属性,静态块代码 (按书写顺序进行)   
    3:非静态成员属性,非静态块代码     
    4:构造方法中的初始化   
    5:父类优先于子类  
      

  5.   

    java加载类的过程一般是先加载父类的静态成员,在加载子类的静态成员,
    然后再加载父类的非静态成员,父类的构造方法,最后
    加载子类的非静态方法,子类的构造方法。例如:
    class Supper
    {
      //静态块
      static
      {
        System.out.println("加载父类的静态方法......");    
      }
      //非静态块
      {
        System.out.println("加载父类的非静态方法......");
      }  public Supper()
      {
        System.out.println("加载父类的构造方法......");
      }
    }class Ch extends Supper

    //静态块
     static
      {
        System.out.println("加载子类的静态方法......");    
      }
      //非静态块
      {
        System.out.println("加载子类的非静态方法......");
      }
    //子类构造方法
      public Supper()
      {
        System.out.println("加载子类的构造方法......");
      }
      public static void main(String args[])
      {
        new Ch();
      }

    其运行结果是:
    加载父类的静态方法......
    加载子类的静态方法......
    加载父类的非静态方法......
    加载父类的构造方法......
    加载子类的非静态方法......
    加载子类的构造方法......