• 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>方法中就是正在创建的对象

  • 相关阅读:
    【转载】Java系列笔记(3)
    CentOS 7下Samba服务器的安装与配置
    Linux常用目录结构
    Linux计划任务crontab
    转:Linux 双网卡配置两个IP同时只有一个会通的原因
    centos7中搭建ntp服务器
    centos7中使用vg方式扩充root分区
    ping命令脚本实现显示网络状态、学生姓名、学号
    centos中基于随机数,再加入班级学生姓名
    centos7 shell脚本实现随机数
  • 原文地址:https://www.cnblogs.com/weiikun/p/10986836.html
Copyright © 2020-2023  润新知