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

  • 相关阅读:
    配置Robot Framework 环境时如何查看wxPython是否成功安装
    win10系统同时安装python2.7和python3.6
    Python 统计不同url svn代码变更数
    JavaWeb之 Servlet执行过程 与 生命周期
    JavaWeb之Servlet:请求 与 响应
    webservice(基础)
    通过反射,给对象之间赋值
    用反射获取类中的属性值
    tree树形
    破解weblogic(数据库)密码
  • 原文地址:https://www.cnblogs.com/kavins/p/8514509.html
Copyright © 2011-2022 走看看