java面试题 类初始化 和实例初始化

以上运行结果      (5) (1) (10) (6)  (9) (3) (2) (9) (8)(7)   

                                                                         (9) (3) (2) (9) (8)(7) 

  1. 解析   考点
  •  类初始化过程 
  •  一个类要创建实例 应先初始化该类   main方法为所在的类需要先加载和初始化
  •  类初始化需要先初始化父类
  •  类初始化就是执行<clinit>()方法
  •  <clinit>()方法由 静态类变量显示赋值代码(如图中  private static int j=method() )和静态代码块组成
  •  静态类变量赋值代码和静态代码块从上到下顺序执行
  •  <clinit>()方法只执行一次

   所以如果main方法中为空的话也会默认初始化son类  即只进行类初始化

  则此时结果是   (5)(1) (10)(6)

  •  实例初始化过程
  • 实例初始化就是执行<init>()方法
  • <init>() 方法可能重载有多个   有几个构造器就有几个<init>方法
  • <init>()方法由非静态实例变量显示赋值代码和非静态代码块  ,对应构造器组成
  • 非静态实例变量显示赋值代码和非静态代码块从上到下顺序执行  ,构造器的代码最后执行
  • 每次创建实例对象   调用对应构造器  执行的就是对应的<init>方法
  • <init>方法的首行是super()或super(实参列表) 及对应父类的init() 方法
  • 所以  子类实例初始化的时候  super()先执行  则父类调用  test()方法时  非静态方法前面有一个默认对象this     this在构造器 或<init>表示正在创建的对象   因为这里是在创建son对象 所以test()执行的是子类重写的代码(面向对象多态   编译看左边 运行看右边)输出(9)

  子类无参构造最后执行

扩展  父类那些方法不可以被重写

     final  方法    

     静态方法

     private等子类中不可见的方法

对象的多态性

    子类如果重写了父类中的方法   通过子类对象调用的一定是子类重写的方法

     非静态方法默认的调用对象是this

     this对象在构造器或者说<init>方法中就是正在创建的对象

猜你喜欢

转载自www.cnblogs.com/weiikun/p/10986836.html