java类的构造方法详解

48 阅读3分钟

构造方法

定义:就是类构造对象时调用的方法,主要用来实例化对象。构造方法分为无参构造方法、有参构造方法。 概念:构方法是一种特殊的“成员方法”

  1. 构造方法作用:(1)构造出来一个类的实例 (2)对构造出来个一个类的实例(对象)初始化
  2. 构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有
  3. 主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的
  4. 类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法
  5. 不能被static、final、synchronized、abstract和native修饰
  6. 构造方法在初始化对象时自动执行,一般不能显式地直接调用. 当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应完成构造函数的调用]
  7. 构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动 但是经常将他设计为进行各种初始化活动,比如初始化对象的属性
  8. 构造代码块:
    1. (1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行
    2. (2)构造代码块和构造函数的区别:    构造代码块是给所有不同对象的共性进行统一初始化,构造函数是给对应的对象进行初始化
  9. 自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。
  10. 构造方法不是有编程人员调用,只能由系统自身调用

如果写了一个有参的构造方法,就一定要写无参构造方法。一般情况下,我们自定义的类都要手动给出无参构造方法。

  1. 在子类的主方法中只调用子类构造方法,实例化子类对象并且在子类构造方法中,没有调用父类的构造方法的任何语句。
  2. 但是在实例化对象时,它相应的调用了父类构造方法,在结果中还可以看到调用构造方法的顺序,
  3. 首先是顶级,再继续往下直达本身类。
  4. 也就是说实例化子类的时候,要首先实例化父类对象,然后再实例化子类对象,所以在子类构造方法调用父类构造方法前,父类已经实例化了。
public class Father {
    public Father(int i) {
        System.out.println("i is father");
    }
}
public class Son extends Father{
    public Son() 
        super(1)
        System.out.println("i is son");
    }
}
public class Grandson extends Son{
    public Grandson() {
        System.out.println("i is grandson");
    }

    public static void main(String[] args) {
        Grandson grandson = new Grandson();
    }
}
# 输出
i is father
i is son
i is grandson

Process finished with exit code 0

父类只有有参构造器, 子类必须显示super调用,否则实例化子类会直接报错 在子类调用构造函数时,必须先调用父类构造函数,因为无参数的构造函数,编译器会自动调用,也就是这种情况不会报错。但是有参数的,就必须要利用Super的方法来调用。如果不进行调用那么将会报错。