几个代码输出结果的问题

运行以下两个程序,写出输出结果:

程序一:

class ClassA{
   public ClassA(){
        System.out.println("ClassA()");   //6.输出classA()    14.   18.
    }
}

class ClassB{                 //3.执行classB       11.
    public ClassB(){
        System.out.println("ClassB()");     //4.输出ClassB()    12.
    }
}

class ClassC extends ClassA{          //17.找到classA
   public ClassC(){
        System.out.println("ClassC()");   //19.输出classC
    }
}
class ClassD extends ClassB{            //2.继承classB    10.
     private ClassA ca = new ClassA();   //5.找到classA()    13.
     private ClassC cc;               //7.没有new 什么也不执行  15.
     public ClassD(){
        System.out.println("ClassD()");  //8.输出classD()
     }
     public ClassD(int i){
        cc = new ClassC();            //16.找到classC
        System.out.println("ClassD(int)");        //20.输出classD(int)
}
}
public class TestConstructors{
    public static void main(String args[]){
       ClassD cd1 = new ClassD();       //1.找到claasD
       ClassD cd2 = new ClassD(10);     //9.找到带参的classD()
    }
}

方法:从main方法入手,分析语句。PS(每条语句后注释为程序语句执行顺序)

运行结果为:

classB()   classA()   classD()   classB()    classA()   classA()    classC()    classD(int)

程序二:

class ClassA{
  static {
     System.out.println("In ClassA Static");    //3.
   }
  public ClassA(){
     System.out.println("ClassA()");      //4.
   }
}
class ClassB{
   static {
      System.out.println("In ClassB Static");   //8.
   }
   public ClassB(){
       System.out.println("ClassB()");   //10.
   }
}
class ClassC extends ClassB{   //7.
   static{
       System.out.println("In ClassC Static");   //9.
   }
public ClassC(){
    System.out.println("ClassC()");   //11.
  }
}
class MyClass {
   static ClassA ca = new ClassA();    //2.
   ClassC cc = new ClassC();       //6.
   static{
      System.out.println("In Static MyClass");  //5.
   }
   public MyClass(){
      System.out.println("MyClass()");   //12.
   }
}
public class TestMain{
   public static void main(String args[]){
      MyClass mc1 = new MyClass();   //1.
      MyClass mc2 = new MyClass();    //13.
      System.out.println(mc1.cc == mc2.cc);//14
      System.out.println(mc1.ca == mc2.ca);//15
  }
}

思路:从main方法入手

      1.有static 先执行static

      2.static存在于继承中时,执行完子类、父类中所有的ststic后在执行其他的。

      3.Static 仅执行一次

运行结果:

In ClassA Static    ClassA()    In Static MyClass    In ClassB Static   In ClassC Static

ClassB()    ClassC()    MyClass()

false true

注释13句执行与第1句一样,只是所有Static 修饰的不在执行,故输出ClassB()    ClassC()    MyClass()

14ccnew ClassC(),故mc1.ccmc2.cc不相等,返回false

15castatic修饰,故mc1.camc2.cc相等,返回true

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值