📜  Java构造函数

📅  最后修改于: 2020-04-02 14:07:02             🧑  作者: Mango

构造函数用于初始化对象的状态。与方法类似,构造函数还包含在创建对象时执行的语句(即指令)的集合

如果我们谈论盒子Box类,那么它将有一些类变量(例如,长度,宽度和高度)。但是,当要创建其对象时(即Box现在将存在于计算机的内存中),是否可以存在一个没有为其尺寸定义值的Box。答案是不。
因此,在创建对象时,可以使用构造函数将值分配给类变量,这些值可以由程序员显式完成,也可以由Java本身(默认构造函数)完成。
什么时候调用构造函数?
每次使用new()关键字创建对象时,都会调用至少一个构造函数(可以是默认构造函数),以将初始值分配给同一类的数据成员
创建对象或实例时会调用构造函数。例如:

class mango
{
  .......
  // A Constructor
  new mango() {}
  .......
}
// 创建一个对象
mango obj = new mango();

编写构造函数的规则:

  • 类的构造函数的名称必须与其所在的类名称相同。
  • Java中的构造函数不能是抽象的,最终的,静态的和同步的。
  • 访问修饰符可用于构造函数声明中,以控制对其的访问,即哪个其他类可以调用构造函数。

构造函数的类型

Java中有两种类型的构造函数:

  1. 无参数构造函数: 没有参数的构造函数称为默认构造函数。如果我们没有在类中定义构造函数,则编译器会为该类创建默认的构造函数(不带参数)。而且,如果我们编写带有参数或无参数的构造函数,则编译器不会创建默认的构造函数。
    默认构造函数根据类型为对象提供默认值,例如0,null等。
    // Java程序展示调用无参数构造函数
    import java.io.*;
    class mango
    {
        int num;
        String name;
        // 对象创建的时候被调用
        mango()
        {
            System.out.println("构造函数被调用");
        }
    }
    class GFG
    {
        public static void main (String[] args)
        {
            // 调用默认构造函数.
            mango mango1 = new mango();
            // 默认构造函数给对象提供默认值
            System.out.println(mango1.name);
            System.out.println(mango1.num);
        }
    }

    输出:

    构造函数被调用
    null
    

     

  2. 参数化构造函数:具有参数的构造函数称为参数化构造函数。如果我们想使用您自己的值来初始化类的字段,请使用参数化的构造函数。
    // Java展示参数化构造函数
    import java.io.*;
    class mango
    {
        // 数据成员.
        String name;
        int id;
        // 参数化构造函数
        mango(String name, int id)
        {
            this.name = name;
            this.id = id;
        }
    }
    class GFG
    {
        public static void main (String[] args)
        {
            // 调用参数化构造函数.
            mango mango1 = new mango("芒果", 1);
            System.out.println("mangoName :" + mango1.name +
                               " and mangoId :" + mango1.id);
        }
    }

    输出:

    mangoName :芒果 and mangoId :1

构造函数是否返回值?

构造函数中没有“返回值”语句,但是构造函数返回当前的类实例。我们可以在构造函数中编写“ return”。

构造函数重载

像方法一样,我们可以重载构造函数,并以不同方式创建对象。编译器根据参数数量,参数类型和参数顺序来区分构造函数。

// Java展示构造函数重载
import java.io.*;
class mango
{
    // 一个参数的构造函数
    mango(String name)
    {
        System.out.println("一个参数的构造函数 " +
                      ": " + name);
    }
    // 两个参数的构造函数
    mango(String name, int age)
    {
        System.out.println("两个参数的构造函数 : " +
                " String and Integer : " + name + " "+ age);
    }
    // 一个参数的构造函数,新类型
    mango(long id)
    {
        System.out.println("一个参数的构造函数 : " +
                                            "Long : " + id);
    }
}
class GFG
{
    public static void main(String[] args)
    {

        mango mango2 = new mango("mango");

        mango mango3 = new mango("doc", 26);

        mango mango4 = new mango(325614567);
    }
}

输出:

一个参数的构造函数 : mango
两个参数的构造函数 : String and Integer : doc 26
一个参数的构造函数 : Long : 325614567

构造函数与Java中的方法有何不同

  • 构造函数的名称必须与它在其中定义的类的名称相同,而对于Java中的方法则不必要。
  • 构造函数不返回任何类型,而方法具有返回类型;如果不返回任何值,则为void
  • 构造函数在创建对象时仅被调用一次,而方法可以被任意多次调用。