讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java里如何使用构造方法初始化对象_Java构造函数设计说明

雨浩姑娘_3903

雨浩姑娘_3903

发布时间:2026-01-18 16:27:09

|

1001人浏览过

|

来源于php中文网

原创

Java构造方法是对象创建时唯一执行的特殊方法;未定义时编译器自动插入无参默认构造,但定义任一构造后默认构造立即消失;必须与类名完全一致且无返回类型,否则视为普通方法;多个构造间用this()调用须为首行且唯一;构造中调用非final实例方法可能导致子类字段未初始化异常;继承有参父类时须显式调用super()。

在java里如何使用构造方法初始化对象_java构造函数设计说明

Java 构造方法不是“可选的初始化方式”,而是对象创建时唯一能执行的、与类同名的特殊方法;没写任何构造方法时,编译器会自动插入一个无参默认构造方法;但只要定义了任意一个构造方法(哪怕带参数),这个默认构造方法就**立即消失**。

构造方法必须与类名完全一致且无返回类型

这是最常被误写的点:加 void 或其他返回类型会让它变成普通方法,JVM 不再识别为构造方法,导致 new 实例时报 NoSuchMethodError 或编译失败。

常见错误现象:

  • 写了 public void Person() { ... } → 编译通过但不是构造方法,new Person() 会调用不到,报错
  • 大小写不一致,如类叫 Person,却写成 person() → 同样被当普通方法

正确写法只有一种形式:

立即学习“Java免费学习笔记(深入)”;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

多个构造方法之间用 this() 调用需满足严格条件

this(...) 必须是构造方法的第一条语句,且只能出现一次;它用于复用已有构造逻辑,避免重复赋值。但不能和 super(...) 共存,也不能在普通方法里调用。

使用场景:

  • 提供多种初始化入口(如支持姓名+年龄、仅姓名、无参)
  • 统一字段校验或默认值设置逻辑,集中到一个“主构造”中

错误示例(编译不通过):

public Person(String name) {
    System.out.println("before"); // ❌ this() 必须第一行
    this(name, 0);
}

正确写法:

java-api-doc-generator
java-api-doc-generator

分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。

下载
public Person(String name) {
    this(name, 0); // ✅ 第一行,且只出现一次
}

构造方法中调用非 final 实例方法可能导致子类状态未初始化

如果在构造方法里调用了被子类重写的方法(且该方法不是 final 或 private),JVM 会按运行时类型去调用子类版本——但此时子类字段尚未初始化,可能返回 null 或默认值(如 0、false)。

例如:

class Parent {
    public Parent() {
        init(); // 实际调用 Child.init(),但 Child.name 还没赋值
    }
    void init() { }
}

class Child extends Parent {
    String name = "Alice";
    void init() {
        System.out.println(name.length()); // NullPointerException
    }
}

规避方式:

  • 构造方法内只调用 private 或 final 方法
  • 把初始化逻辑拆到独立的 init() 方法,在 new 完成后再手动调用

IDE 自动生成构造方法时容易忽略父类构造签名

当类继承自有参构造的父类(如 extends Exception),子类若没显式写 super(...),编译器会尝试插 super() —— 但父类根本没有无参构造,直接编译失败。

典型错误信息:

Implicit super constructor Exception() is undefined. Must explicitly invoke another constructor

解决办法:

  • 手动补上 super(message) 或对应参数
  • 在 IDE 生成构造方法时,勾选“Delegate to constructor of superclass”选项(IntelliJ/ Eclipse 均支持)

这问题在写自定义异常或框架扩展类时高频出现,尤其容易在重构父类后突然爆发。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
eclipse教程
eclipse教程

php中文网为大家带来eclipse教程合集,eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。php中文网还为大家带来eclipse的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

690

2023.06.14

eclipse怎么设置中文
eclipse怎么设置中文

eclipse设置中文的方法:除了设置界面为中文外,你还可以为Eclipse添加中文插件,以便更好地支持中文编程。例如,你可以安装EBNF插件来支持中文变量名,或安装Chinese Helper来提供中文帮助文档。本专题为大家提供eclipse设置中文相关的各种文章、以及下载和课程。

5846

2023.07.24

c语言编程软件有哪些
c语言编程软件有哪些

c语言编程软件有GCC、Clang、Microsoft Visual Studio、Eclipse、NetBeans、Dev-C++、Code::Blocks、KDevelop、Sublime Text和Atom。更多关于c语言编程软件的问题详情请看本专题的文章。php中文网欢迎大家前来学习。

9059

2023.11.02

Eclipse版本号有哪些区别
Eclipse版本号有哪些区别

区别:1、Eclipse 3.x系列:Eclipse的早期版本,包括3.0、3.1、3.2等;2、Eclipse 4.x系列:Eclipse的最新版本,包括4.0、4.1、4.2等;3、Eclipse IDE for Java Developers等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2804

2024.02.23

eclipse和idea有什么区别
eclipse和idea有什么区别

eclipse和idea的区别:1、平台支持;2、内存占用;3、插件系统;4、智能代码提示;5、界面设计;6、调试功能;7、学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

662

2024.02.23

eclipse设置中文全教程
eclipse设置中文全教程

本专题整合了eclipse设置中文相关教程,阅读专题下面的文章了解更多详细操作。

3766

2025.10.10

eclipse字体放大教程
eclipse字体放大教程

本专题整合了eclipse字体放大教程,阅读专题下面的文章了解更多详细内容。

3785

2025.10.10

eclipse左边栏不见了解决方法
eclipse左边栏不见了解决方法

本专题整合了eclipse左边栏相关教程,阅读专题下面的文章了解更多详细内容。

528

2025.10.15

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn