行业资讯 2025年08月6日
0 收藏 0 点赞 550 浏览 2605 个字
摘要 :

文章目录 1. Java中的构造函数是什么? 2.默认和参数化构造函数 2.2. 参数化构造函数 3. 创建构造函数的规则 4. 使用this()和super()的构造函数链接 4.1. 用this ()……




  • 1. Java中的构造函数是什么?
  • 2.默认和参数化构造函数
    • 2.2. 参数化构造函数
  • 3. 创建构造函数的规则
  • 4. 使用this()和super()的构造函数链接
    • 4.1. 用this ()调用同一个类的构造函数
    • 4.2. 使用super()调用父类的构造函数
  • 5.私有构造

Java 构造函数是特殊的类似方法的结构,允许在应用程序中的其他类可以使用对象之前完全初始化对象状态。构造函数是使用 new 关键字调用的。

1. Java中的构造函数是什么?

构造函数是特殊的类似方法(但不完全是方法)的构造,可帮助程序员在对象可供应用程序中的其他对象使用之前编写对象初始化代码。

public class MyClass {

  public MyClass() {
    //...
  }
}

每当应用程序需要一个类的新实例时,JVM 会在堆内存中分配一个内存区域。然后 JVM 执行被调用的构造函数(一个类可以有多个构造函数),并初始化对象状态。在构造函数内部,我们可以访问所有对象属性并将它们分配给它们的默认或所需值。

如果我们没有在类中定义任何构造函数,JVM 会自动插入一个带有空主体的默认构造函数。

2.默认和参数化构造函数

构造函数可以有两种类型。不接受任何参数的构造函数也称为默认无参构造函数。其他接受参数的构造函数称为有参构造函数。

//编译器提供的默认构造函数
public class Employee { 

  public Employee() {
     super();
  }
}

请注意,我们还可以覆盖默认构造函数并添加更多与状态初始化相关的代码。

//重写默认构造函数
public class Employee { 

  public Employee() {

     //addtional statements
     this.age = calculateAgeFromDateOfBirth();
  }
}

2.2. 参数化构造函数

一个类中可以有多个构造函数。我们可以在类中定义重载构造函数,在每个构造函数中接受不同的参数集。

public class Employee {

  private String firstName;
  private String lastName;
 
  public Employee() { //constructor 1

  }
 
  public Employee(String firstName) { //constructor 2
       //statements
  }
 
  public Employee(String firstName, String lastName) { //constructor 3
       //statements
  }
}

如果我们在类中定义非默认参数化构造函数,那么 JVM 不会在字节码中插入默认构造函数。在这种情况下,如果需要默认构造函数,我们必须显式创建默认构造函数。

例如,在下面的Employee类中,我们只创建了一个参数化构造函数:

class Employee {
  public Employee(String name) {
  }
}

如果我们尝试使用默认构造函数创建Employee实例,则会出现编译错误:

Employee employee = new Employee();  //报错

3. 创建构造函数的规则

java 中创建构造函数有一些强制性规则。

  • 构造函数的名称必须与类的名称相同。
  • 构造函数定义中不能有任何返回类型。
  • 构造函数中不能有任何 return 语句。
  • 构造函数可以由不同的参数重载。
  • 如果要使用super()方法调用父类构造函数,它必须是构造函数内的第一条语句。

4. 使用this()和super()的构造函数链接

在Java中,可以在构造函数内调用其他构造函数。它就像方法调用一样,但没有任何引用变量(显然,因为实例现在尚未完全初始化)。

现在我们可以调用同一个类或父类的构造函数。两者都使用不同的语法。

4.1. 用this ()调用同一个类的构造函数

要调用同一类中的其他构造函数,请使用this关键字。在以下代码中,this()调用默认构造函数,而this(firstName)调用第一个接受String类型的单个参数的构造函数。

public Employee() {
}
public Employee(String firstName) {
    this();        //calling default constructor
}
public Employee(String firstName, String lastName) {
    this(firstName);    //calling constructor with single argument of String type
}

4.2. 使用super()调用父类的构造函数

要从父类或父类调用构造函数,请使用super关键字。super关键字的用法与关键字类似this,唯一的区别是super指的是超类,而this指的是当前实例。

public class Parent {
  public Parent() {
    //...
  }
}
public class Child extends Parent {
  public Child() {
    super(); //invokes Parent\'s constructor
  }
}

5.私有构造

有时我们想保护构造函数不被其他类调用。总而言之,我们希望没有人能够创建该类的新实例。

为什么有人想要那个?嗯,这对于单例模式来说是必要的。在单例中,应用程序希望任何类都只有一个实例。

常见的单例类定义如下所示:

public class DemoSingleton implements Serializable
{
    private static final long serialVersionUID = 1L;
    private DemoSingleton() {
        // private constructor
    }
    private static class DemoSingletonHolder {
        public static final DemoSingleton INSTANCE = new DemoSingleton();
    }
    public static DemoSingleton getInstance() {
        return DemoSingletonHolder.INSTANCE;
    }
    protected Object readResolve() {
        return getInstance();
    }
}

这就是java中构造函数的全部内容。在评论部分告诉我你的问题。

归属教程 Java基础教程

文章目录 前言  第1章 Java语言基础 第2章 流程控制语句 第3章 面向对象编程 第4章 Java 字符 […]

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9120.html

管理员

上一篇: Java 访问修饰符
下一篇: Java中的多重继承
相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号