对初学者友善的系列文章-了解Java构造函数

    在本教程中,我们将通过示例了解Java构造函数,它们的类型以及如何使用它们。

什么是构造函数?

    Java中的构造函数类似于创建类的对象时调用的方法。
    与Java方法不同,构造函数与类具有相同的名称,并且没有任何返回类型。例如,

class Test {
  Test() {
    // constructor body
  }
}

    在这里,Test()是一个构造函数。它具有与该类相同的名称,并且没有返回类型。

示例1:Java构造函数
class Main {
  private String name;

  // constructor
  Main() {
    System.out.println("Constructor Called:");
    name = "Programiz";
  }

  public static void main(String[] args) {

    // constructor is invoked while
    // creating an object of the Main class
    Main obj = new Main();
    System.out.println("The name is " + obj.name);
  }
}

    输出:

Constructor Called:
The name is Programiz

    在上面的示例中,我们创建了一个名为Main()的构造函数。在构造函数内部,我们正在初始化 name 变量。
    注意创建Main类的对象的语句:

Main obj = new Main();

    在这里,当创建对象时,将调用Main()构造函数。并且,name变量的值被初始化。
    因此,程序将name变量的值打印为Programiz。

构造函数的类型

    在Java中,构造函数可以分为3种类型:
    1.无参数构造函数
    2.参数化构造函数
    3.默认构造函数

1. Java 无参数构造函数

    与方法类似,Java构造函数可能有也可能没有任何参数。
    如果构造函数不接受任何参数,则称为无参数构造函数。例如,

private Constructor() {
   // body of the constructor
}
示例2:Java私有无参数构造函数
class Main {

  int i;

  // constructor with no parameter
  private Main() {
    i = 5;
    System.out.println("Constructor is called");
  }

  public static void main(String[] args) {

    // calling the constructor without any parameter
    Main obj = new Main();
    System.out.println("Value of i: " + obj.i);
  }
}

    输出:

Constructor is called
Value of i: 5

    在上面的示例中,我们创建了一个构造函数Main()。在这里,构造函数不接受任何参数。因此,它被称为无参数构造函数。
    请注意,我们已将构造函数声明为private。
    一旦构造函数被声明为私有,就不能从类外部访问它。因此,禁止使用私有构造函数从类外部创建对象。
    这里,我们在同一个类中创建对象。因此,程序能够访问构造函数。
    但是,如果要在类外部创建对象,则需要将构造函数声明为public。

示例3:Java公共无参数构造函数
class Company {
  String name;

  // public constructor
  public Company() {
    name = "Programiz";
  }
}

public class Main {

  public static void main(String[] args) {

    // object is created in another class
    Company obj = new Company();
    System.out.println("Company name = " + obj.name);
  }
}

    输出:

Company name = Programiz
2. Java参数化构造函数

    Java构造函数也可以接受一个或多个参数。此类构造函数称为参数化构造函数(带参数的构造函数)。

示例4:参数化构造函数
class Main {

  String languages;

  // constructor accepting single value
  Main(String lang) {
    languages = lang;
    System.out.println(languages + " Programming Language");
  }

  public static void main(String[] args) {

    // call constructor by passing a single value
    Main obj1 = new Main("Java");
    Main obj2 = new Main("Python");
    Main obj3 = new Main("C");
  }
}

    输出:

Java Programming Language
Python Programming Language
C Programming Language

    在上面的示例中,我们创建了一个名为Main()的构造函数。在这里,构造函数采用单个参数。注意表达式:

Main obj1 = new Main("Java");

    在这里,我们将单个值传递给构造函数。根据传递的参数,在构造函数内部初始化语言变量。

3. Java默认构造函数

    如果我们不创建任何构造函数,则Java编译器会在程序执行期间自动创建一个无参数的构造函数。该构造函数称为默认构造函数。

示例5:默认构造函数
class Main {

  int a;
  boolean b;

  public static void main(String[] args) {

    // A default constructor is called
    Main obj = new Main();

    System.out.println("Default Value:");
    System.out.println("a = " + obj.a);
    System.out.println("b = " + obj.b);
  }
}

    输出:

a = 0
b = false

    在这里,我们没有创建任何构造函数。因此,Java编译器会自动创建默认构造函数。
    默认构造函数使用默认值初始化所有未初始化的实例变量。

TypeDefault Value
booleanfalse
byte0
short0
int0
long0L
char\u0000
float0.0f
double0.0d
objectReference null

    在上述程序中,变量a和b分别用默认值0和false初始化。
    上面的程序等效于:

class Main {

  int a;
  boolean b;

  // a private constructor
  private Main() {
    a = 0;
    b = false;
  }

  public static void main(String[] args) {
    // call the constructor
    Main obj = new Main();

    System.out.println("Default Value:");
    System.out.println("a = " + obj.a);
    System.out.println("b = " + obj.b);
  }
}

    该程序的输出与示例5相同。

有关Java构造函数的重要说明
  • 实例化对象时,将隐式调用构造函数。
  • 创建构造函数的两个规则是:
    • 构造函数的名称应与类相同。
    • Java构造函数不得具有返回类型。
  • 如果类没有构造函数,则Java编译器会在运行时自动创建默认构造函数。默认构造函数使用默认值初始化实例变量。例如,int变量将被初始化为0。
  • 构造函数类型:
    • 无参数构造函数-不接受任何参数的构造函数
    • 参数化构造函数-接受参数的构造函数
    • 默认构造函数-如果未明确定义,则由Java编译器自动创建的构造函数。
  • 构造函数不能为abstract或static或final。
  • 构造函数可以重载,但不能被覆盖。
Java中的构造方法重载

    类似于Java方法重载,我们还可以创建两个或多个具有不同参数的构造函数。这称为构造函数重载。

示例6:Java构造函数重载
class Main {

  String language;

  // constructor with no parameter
  Main() {
    this.language = "Java";
  }

  // constructor with a single parameter
  Main(String language) {
    this.language = language;
  }

  public void getName() {
    System.out.println("Programming Langauage: " + this.language);
  }

  public static void main(String[] args) {

    // call constructor with no parameter
    Main obj1 = new Main();

    // call constructor with a single parameter
    Main obj2 = new Main("Python");

    obj1.getName();
    obj2.getName();
  }
}

    在上面的示例中,我们有两个构造函数:Main()和Main(String language)。在这里,两个构造函数都使用不同的值初始化变量语言的值。
    根据对象创建期间传递的参数,调用不同的构造函数并分配不同的值。
    也可以从另一个构造函数调用一个构造函数。要了解更多信息,请访问 Java Call One Constructor from Another
    注意:我们使用this关键字来指定类的变量。要了解有关this关键字的更多信息,请访问Java this keyword

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值