0

0

了解 Java 构造函数和静态块

聖光之護

聖光之護

发布时间:2024-12-10 08:06:00

|

1128人浏览过

|

来源于dev.to

转载

了解 java 构造函数和静态块

如果您深入研究 java,您可能会遇到“构造函数”和“静态块”这两个术语。这些是基本概念,特别是在 java 中使用面向对象编程时。在本文中,我们将揭示它们是什么、它们如何工作以及它们为何重要。无论您是 java 新手还是只是需要复习一下,让我们开始吧!

什么是构造函数?

将构造函数视为对象的蓝图,正是赋予它生命的东西!当您在 java 中创建(或实例化)对象时,构造函数是首先运行的代码块。它的工作?要设置对象,初始化变量,并准备好一切以供使用。简单!

关于构造函数的要点:

  • 与类同名:构造函数与类同名。没有例外。
  • 无返回类型:与方法不同,构造函数不返回任何内容,甚至不返回 void。
  • 自动调用:当使用new创建对象时,构造函数会自动调用。
  • 可以重载:同一个类中可以有多个具有不同参数的构造函数。这称为构造函数重载(运算符重载)。

让我们举一个构造函数的例子

class car {
    string model;
    int year;

    // constructor
    public car(string model, int year) {
        this.model = model;
        this.year = year;
    }
}

在上面的示例中,当您创建 car 对象时,会调用构造函数来初始化型号和年份。

car mycar = new car("tesla", 2022);

此处,“tesla”和 2022 被传递给构造函数,设置型号和年份字段的值。


构造函数的类型:

1.默认构造函数

如果你没有在构造函数中定义参数,java 会提供一个默认参数。它没有做太多事情,只是初始化对象,没有任何设置。

class bike {
    // default constructor provided by java
}
bike mybike = new bike(); // works fine

2.参数化构造函数

顾名思义,这个构造函数使用参数来初始化对象的特定字段。

class bike {
    string brand;
    public bike(string brand) {
        this.brand = brand;
    }
}

什么是静态块?

现在,我们来谈谈静态块。当构造函数处理初始化对象时,静态块帮助初始化静态变量。这些代码块 main 方法之前运行,并且仅在类加载到内存中时执行一次。

BiLin AI
BiLin AI

免费的多语言AI搜索引擎

下载

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

关于静态块的要点:

  • 运行一次:静态块仅在类加载时运行一次。
  • 在 main 方法之前:它们甚至在 main() 方法开始之前执行。
  • 用于静态初始化:非常适合初始化静态变量或执行需要每个类(而不是每个对象)运行一次的设置代码。

举个例子

class databaseconnection {
    static string dburl;

    // static block
    static {
        dburl = "jdbc:mysql://localhost:3306/mydb";
        system.out.println("static block executed. database url initialized.");
    }

    public static void connect() {
        system.out.println("connecting to: " + dburl);
    }
}

在此示例中,静态块仅在类加载到内存中时初始化 dburl 一次。您不需要创建 databaseconnection 类的对象来执行静态块。

为什么使用静态块?

  • 一次性设置:非常适合在程序生命周期中只需要发生一次的事情(例如,设置配置或数据库连接)。
  • 静态变量初始化:如果您的静态变量需要更复杂的初始化(例如,从文件中读取或执行计算),静态块是理想的选择。

静态块与构造函数:有什么区别?

现在我们已经了解了这两个概念,让我们通过表来阐明静态块和构造函数之间的区别。

  • 静态块:在类加载时运行
    • 构造函数:创建对象时运行
  • 静态块:无论创建多少个对象,仅执行一次
    • 构造函数:每次实例化对象时执行
  • 静态块:用于初始化静态成员
    • 构造函数:用于初始化实例(非静态)成员
  • 静态块:不能接受参数
    • 构造函数:可以接受参数(通过构造函数重载)
  • 静态块:无法访问此关键字(因为它是类级别的)
    • 构造函数:有权访问此关键字(因为它是对象级别的)

用例:何时使用什么?

  • 当您想要初始化新对象的状态(例如设置汽车对象的型号和年份)时,请使用构造函数
  • 当您需要执行静态变量的一次性初始化(例如设置数据库 url)时,请使用静态块

如果我们将静态块和构造函数结合起来怎么办?

class example {
    static int counter;

    static {
        counter = 100;
        system.out.println("static block: counter initialized to 100");
    }

    public example() {
        counter++;
        system.out.println("constructor: counter incremented. current counter: " + counter);
    }
}

以下是创建示例对象时会发生的情况:

Example ex1 = new Example();  // Static block runs first, then constructor
Example ex2 = new Example();  // Only constructor runs, static block is skipped

最后的想法

请记住,构造函数专注于单个对象初始化,而静态块则处理类级初始化。知道何时以及如何使用它们将使您的 java 程序更有组织、更高效、更易于维护。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

150

2025.10.17

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

64

2025.11.27

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

134

2025.11.27

Go语言实现运算符重载有哪些方法
Go语言实现运算符重载有哪些方法

Go语言不支持运算符重载,但可以通过一些方法来模拟运算符重载的效果。使用函数重载来模拟运算符重载,可以为不同的类型定义不同的函数,以实现类似运算符重载的效果,通过函数重载,可以为不同的类型实现不同的操作。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

196

2024.02.23

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.6万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 850人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号