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

  • 相关阅读:
    MVC设置默认页面
    MySQL_DBA整理
    解决git提交敏感信息(回退git版本库到某一个commit)
    并发数计算
    高并发下的 Nginx 优化与负载均衡
    PassengerNginxdebian快速部署Rails
    Linux+postfix+extmail+dovecot打造基于web页面的邮件系统
    2018.11.30软件更新公告
    2018.10.11软件更新公告
    2018.09.25软件更新公告
  • 原文地址:https://www.cnblogs.com/kavins/p/8514509.html
Copyright © 2011-2022 走看看