zoukankan      html  css  js  c++  java
  • 构造器初始化

    大家看一下这个例子:

    public class Window {
    Window(int marker) {
    System.out.println("Window(" + marker + ")");
    }
    }

    public class House {

    Window w1 = new Window(1);
    House() {
    System.out.println("House()");
    w3 = new Window(33);
    }
    Window w2 = new Window(2);
    void f() {
    System.out.println("f()");
    }
    Window w3 = new Window(3);
    }

    public class OrderOfInitialization {

    public static void main(String[] args) {
    House h = new House();
    h.f();
    }

    }

    想一想会输出什么样的结果?

    output:

    Window(1)
    Window(2)
    Window(3)
    House()
    Window(33)
    f()

    看到了什么?首先是从main入手,创建一个House对象,然后初始化开始,进入House类中,先初始化谁呢?首先看到了Window类,并创建了一个Window对象,那么是不是要先初始化Window呢?从输出结果来看,似乎是这样的,但接下来的输出结果一起将Window(2)和Window(3)也输出来了,没按套路出牌啊,应该先输出House()啊,怎么Window(2)和Window(3)比House()先输出来了呢?后来又做了个试验:将Window w1 = new Window(1)这段代码移动到了House()构造方法的后面,输出结果如下:

    Window(1)
    Window(2)
    Window(3)
    House()
    Window(33)
    f()

    恩?一样的?恩,是一样的,怎么回事儿呢?再做个试验,再创建一个类Door吧,代码如下:

    public class Door {

    Door() {
    System.out.println("Door()");
    }
    }

    public class House {

    House() {
    System.out.println("House()");
    w3 = new Window(33);
    }
    Window w1 = new Window(1);
    Window w2 = new Window(2);
    void f() {
    System.out.println("f()");
    }
    Window w3 = new Window(3);
    Door door = new Door();
    }

    看看输出结果:

    Window(1)
    Window(2)
    Window(3)
    Door()
    House()
    Window(33)
    f()

    看出来大概的意思了吧,不管谁先谁后,只要我House()这个构造函数里面new了对象,那么就先去初始化这些new的对象,恩,对的,是这么个意思,问题到这里就差不多解决了。希望能够对大家起到帮助。

  • 相关阅读:
    Javascript Number类型常见迷惑点
    如何获取浏览器URL中查询字符串的参数
    Javascript string对象
    更新winform嵌套html,cef无法支持x64位的问题
    方便快捷的客户端打包工具“HM NIS Edit”
    关于C# 操作 “Everything” 的使用,超好用
    Java map集合的常用方法
    Asp.net 项目部署的403问题
    C# 获取电脑配置信息
    获取电脑系统唯一GUID
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3221762.html
Copyright © 2011-2022 走看看