zoukankan      html  css  js  c++  java
  • java中对象的初始化顺序

    class HelloA {
      public HelloA() {
      System.out.println("HelloA");
      }
      { System.out.println("I'm A class"); }
      static { 
      System.out.println("static A");
      } }
    public class HelloB extends HelloA {   public HelloB() {   System.out.println("HelloB");   }   { System.out.println("I'm B class"); }   static {
        System.out.println("static B");
    }   
    public static void main(String[] args) {     System.out.println("main() start");     new HelloB();     System.out.println("main() end"); } }

    运行结果为:

    static A
    static B
    main() start
    I'm A class
    HelloA
    I'm B class
    HelloB
    main() end

    对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。

    class People {
      String name;
      public People() {
        System.out.print(1);
      }
      public People(String name) {
        System.out.print(2);
        this.name = name;
      }
    }
    class Child extends People {
      People father;
      public Child(String name) {
        System.out.print(3);
        this.name = name;
        father = new People(name + ":F");
      }
      public Child() {
        System.out.print(4);
      }
      }
    new Child("mike")

    输出132

    第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法(就是没有参数的构造方法),但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是如果在子类构造方法中我们并没有显示的调用基类的构造方法,如:super();  这样就会调用父类没有参数的构造方法。    

    第二个规则:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数,此时无参的构造函数就不会被调用。

     转自https://www.cnblogs.com/LoganChen/p/6391532.html

  • 相关阅读:
    【Cloud Foundry】Could Foundry学习(二)——核心组件分析
    POJ 1789-Truck History
    设置静态IP
    oracle切割字符串后以单列多行展示
    SQL server语句练习
    hdu 3308 LCIS(线段树)
    HDU 1556 Color the Ball 线段树 题解
    CSipSimple最新版本号
    奢侈品行业-新手专题-亿邦动力网
    单身潮_百度百科
  • 原文地址:https://www.cnblogs.com/kavins/p/8514509.html
Copyright © 2011-2022 走看看