【编程基础知识】详解Java构造函数

简介: 构造函数是与类同名且不带返回值的特殊函数,用于对象初始化。它可以是无参或有参的,支持重载。若未自定义构造函数,编译器会提供默认的无参构造函数。子类构造函数会先调用父类的构造函数,确保父类对象先被创建。构造函数的主要作用是初始化对象的存储空间、调用父类构造函数和初始化成员变量。

​​​​image.png

关键字:构造函数、类、初始化、无参构造函数、有参构造函数、重载、子类、父类、对象存储空间、默认构造函数、构造方法、执行过程。

一、What 什么是构造函数?

构造函数是一种不带任何返回值且与类同名的函数,它是属于类的,在new类的实例对象时被调用。分无参和有参两种。可以自定义构造函数。若未自定义构造函数,则调用默认的无参构造函数;若自定义了构造函数,则根据参数类型及个数再决定调用哪个。

在new一个实例对象时,会先调用的是父类的构造函数,再调用子类的构造函数。即先创建出父类对象,然后才能创建子类对象,详见下图:
image.png
以下是对应的Java代码文本:

class Parent {
   
    Parent() {
   
        System.out.println("Parent constructor");
    }
}

class Child extends Parent {
   
    Child() {
   
        System.out.println("Child constructor");
    }
}

public class Test {
   
    public static void main(String[] args) {
   
        Child child = new Child();
    }
}

这段代码定义了一个父类Parent和一个继承自Parent的子类Child。在ParentChild类中,都有一个构造函数,分别在创建对象时打印出构造函数的信息。在Test类的main方法中,创建了Child的一个实例,将会调用ChildParent的构造函数。

二、Why 为什么要有构造函数?

通过构造函数可以给类的对象初始化一些共用的基本属性信息或实现一些该类对象都需要实现的基本功能,提升代码的简洁性。试想一下,假如没有构造函数来替我们做这些事情,岂不是每创建一个对象后都需要编写一些重复的代码呢?

三、构造函数

1、构造函数是一种特殊的方法,具有以下特点

1).构造函数的方法名必须和类名相同

2).构造函数没有返回类型,可以有return但是不能有返回值,这这里只是标识结束,并不是返回的表示,一般也不使用return

3).构造函数的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。

4).一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造方法,这个构造方法不执行任何代码。

5).构造方法可以重载,以参数的个数、类型、顺序。

2、构造函数的调用

子类必须先调用父类的构造函数。可以通过系统自动调用父类的默认构造函数,如果父类没有默认构造函数时,子类构造函数必须通过super调用父类的其他有参的构造函数。

3、构造函数的执行过程

1).初始化对象的存储空间为0或null值;

2).调用父类构造函数;

3).按照顺序分别调用类成员变量和实例成员变量的初始化表达式。

注意:除构造器之外,编译器禁止在其他任何方法中调用构造器。

四、总结

这篇文章是关于编程中构造函数的基础知识的详细解析。文章分为三个主要部分:

  1. 什么是构造函数?
    • 构造函数是与类同名且不带返回值的特殊函数。
    • 它在创建类的新实例时被调用。
    • 可以是无参或有参的。
    • 如果没有自定义构造函数,编译器会提供一个默认的无参构造函数。
  2. 为什么要有构造函数?
    • 构造函数用于初始化对象的共用基本属性或功能。
    • 它避免了创建每个对象时重复编写初始化代码。
  3. 构造函数的特点和执行过程:
    • 特点:
      • 方法名必须与类名相同。
      • 没有返回类型。
      • 用于对象初始化。
      • 可以有多个构造方法(重载)。
      • 如果没有定义构造方法,编译器会插入一个无操作的默认构造方法。
    • 调用规则:
      • 子类构造函数会首先调用父类的构造函数。
      • 如果父类没有默认构造函数,子类需要通过super显式调用父类的构造函数。
    • 执行过程:
      • 初始化对象存储空间为0或null。
      • 调用父类构造函数。
      • 初始化类成员和实例成员变量。
  4. 构造函数不能在除自身之外的其他方法中被调用的规则。

    五、汇总

    image.png
目录
相关文章
|
19天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
37 2
|
2天前
|
Java 程序员 数据库连接
Java编程中的异常处理:从基础到进阶
【10月更文挑战第6天】在Java的世界中,异常处理是代码健壮性的守门人。它不仅防止程序因未预见的错误而崩溃,还提供了优雅地处理错误情况的机会。本文将带你了解Java异常处理的核心概念,探索try-catch-finally语句的奥秘,并深入异常类层次结构的内部。通过实际代码示例,我们将一起学习如何创建自定义异常,以及如何使用throws关键字和throw语句来管理异常。无论你是Java新手还是希望提升你的异常处理技能,这篇文章都将是你的指南针,指引你穿越异常处理的迷宫。
27 9
|
1天前
|
并行计算 Java 调度
深入理解Java中的多线程编程
【10月更文挑战第6天】 本文将探讨Java中多线程编程的基本概念、实现方式及其在实际项目中的应用。通过详细的示例和解释,读者能够掌握如何在Java中有效地使用多线程来提高程序的性能和响应能力。
4 1
|
5天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
7天前
|
Java API 调度
Java 多线程编程详解
《Java多线程编程详解》深入浅出地讲解了Java平台下的多线程核心概念、API使用及最佳实践。从基础理论到实战案例,本书帮助读者掌握并发编程技巧,提升软件开发中的效率与性能,是Java开发者不可或缺的参考指南。
|
5天前
|
Java 程序员 编译器
在Java编程中,if-else与switch语句犹如武林高手的剑与刀
【10月更文挑战第3天】在Java编程中,if-else与switch语句犹如武林高手的剑与刀。本文通过示例展示如何巧妙运用这两种工具,提升代码效率与可读性。从精简if-else结构到高效使用switch语句,再到性能考量,帮助你在不同场景下做出最佳选择,让你的程序更加流畅高效。掌握这些技巧,你将在Java世界中游刃有余!
11 2
|
8天前
|
Oracle Java 关系型数据库
Java编程之旅:从基础到进阶
Java,一种广泛使用的编程语言,因其平台无关性、面向对象的特性而备受推崇。本文旨在通过简明易懂的语言和实际代码示例,引导初学者了解Java的基本概念,并逐步深入到更复杂的编程技巧。我们将从Java的安装开始,经过变量、数据类型、控制结构等基础知识的学习,最后探讨异常处理和文件操作等进阶话题。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。
|
7天前
|
安全 Java 调度
理解 Java 中的多线程编程
本文深入探讨了Java中的多线程编程,涵盖线程创建与管理、同步机制、锁及死锁避免策略。介绍了通过继承`Thread`类或实现`Runnable`接口创建线程的方法,并讨论了线程的生命周期状态。此外,还讲解了如何使用`ExecutorService`线程池以及`java.util.concurrent`包中的工具类来简化并发编程。理解这些概念和技术,有助于开发高效稳定的多线程应用程序。
|
1天前
|
Java 调度
深入理解Java中的多线程编程
【10月更文挑战第6天】 本文将通过通俗易懂的语言,详细讲解Java多线程编程的基本概念、使用方法以及注意事项。从简单的线程创建到高级的线程同步与通信,帮助您全面掌握Java多线程编程的核心知识,提升程序运行效率和性能。
6 0
|
3天前
|
安全 Java 调度
深入理解Java中的多线程编程
【10月更文挑战第5天】 本文将通过通俗易懂的方式,详细解析Java中多线程编程的核心概念和实际应用。我们将从基本概念入手,逐步探讨创建线程、线程同步、线程通信以及线程池的使用等内容。无论是初学者还是有经验的开发者,都能在本文中找到有价值的信息,启发对多线程编程的深层次思考。