zoukankan      html  css  js  c++  java
  • 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>方法中就是正在创建的对象

  • 相关阅读:
    private static final long serialVersionUID = 1L;
    HashMap和Hashtable的区别
    MySQL中tinytext、text、mediumtext和longtext详解
    char、varchar、text和nchar、nvarchar、ntext的区别
    java获取文件夹下文件名
    java删除文件
    js判断浏览器
    nodejs调试:node-inspector
    [转]各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT
    [IBM]掌握Ajax,Ajax中的高级请求和响应
  • 原文地址:https://www.cnblogs.com/weiikun/p/10986836.html
Copyright © 2011-2022 走看看