zoukankan      html  css  js  c++  java
  • 对象的创建过程(chapter5.7.3)

    总结一下对象的创建过程,假设有一个名为Dog的类:

    • 1. 即使没有显示地使用static关键字,构造器实际上也是静态的方法,因此,当首次创建类型为Dog的对象时(构造器可以看成静态方法),或者Dog类的静态方法/静态域首次被访问时,java解释器必须查找类的路径,以定位Dog.class文件。
    • 2. 然后载入Dog.class(后面会学到,这将创建一个Class对象),有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次。
    • 3. 当用new Dog()创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间。
    • 4. 这块存储空间会被清零,这就自动地将Dog对象中的所有基本类型数据都设置成了默认值(对数字来说是0,对布尔值和字符型也相同),而引用则被置为null。
    • 5. 执行所有出现于字段定义处的初始化动作。
    • 6. 执行构造器。正如将在第7章所看到的,这可能会牵扯到很多动作,尤其是涉及继承的时候。
     1 class Cat {
     2     static int getInt(String x, int y){
     3         System.out.println("getInt is using!" + x);
     4         return y;
     5     }
     6     
     7     Cat(){
     8         System.out.println("constructor of cat is using");
     9     }
    10 }
    11 
    12 class Dog extends Cat{
    13     int i = Cat.getInt("i", 112);
    14     static int j = Cat.getInt("j", 223);
    15     Dog() {
    16         System.out.println("Constructor of Dog is using");
    17     }
    18 }
    19 
    20 
    21 public class Initialize {
    22 
    23     public static void main(String[] args) {
    24         // TODO Auto-generated method stub
    25         Dog dog = new Dog();
    26     }
    27 
    28 }
    View Code

    output:

    etInt is using!--j
    constructor of cat is using
    getInt is using!--i
    Constructor of Dog is using

    说明:构造某类的一个对象时,先初始化静态域,接着调用父类的构造函数,再初始化非静态域,最后调用构造函数。

  • 相关阅读:
    jqgrid 使用入门
    bootstrap build
    bootstrap ace
    前序中序后序
    蓝桥杯-【交换瓶子】
    蓝桥杯-【剪邮票】【2016年省赛B组题解】--bfs+全排列
    蓝桥杯-【方格填数】【2016年省赛B组题解】
    2018年第九届蓝桥杯【C++省赛B组】【第十题:乘积最大】—贪心算法
    2018年第九届蓝桥杯【C++省赛B组】 第九题——全球变暖(bfs+queue)
    2018年第九届蓝桥杯【C++省赛B组】【第八题:日志统计】尺取法
  • 原文地址:https://www.cnblogs.com/HITSZ/p/6385271.html
Copyright © 2011-2022 走看看