类结构——构造方法

类结构——构造方法

  • 构造方法的基本特性
  • 默认构造方法
  • 构造方法重载
  • 使用this关键字
  • 私有构造方法
  • 总结

构造方法(Constructor)是Java编程语言中的一个重要概念,用于初始化新创建的对象。在对象实例化时被调用,并负责设置对象的初始状态。

构造方法的基本特性

名称:构造方法的名字必须与类名完全相同。
返回类型:构造方法没有返回类型声明,连void也不允许使用。
参数列表:可以定义带参或不带参的构造方法。带参构造方法可以在对象创建时接收参数,以便初始化对象的状态。
访问修饰符:构造方法可以有public、protected、默认(包级私有)或private等访问级别。

默认构造方法

1、如果一个类中没有显式定义任何构造方法,Java编译器会自动提供一个无参的默认构造方法。
2、一旦定义了至少一个构造方法,编译器将不再提供默认构造方法,因此如果仍然需要无参构造方法,则必须显式定义。

构造方法重载

在同一个类中,可以定义多个构造方法,只要它们的参数列表不同(参数的数量、类型或顺序),这就是构造方法的重载。
这种灵活性使得程序员可以根据不同的需求以不同的方式初始化对象。

public class ClassStructure {
    private String name;
    private int age;
    //构造方法
    //无参构造方法
    public ClassStructure() {

    }
    //全参构造方法
    public ClassStructure(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //含参构造方法
    public ClassStructure(String name) {
        this.name = name;
    }
}

测试一下

public class Main {
    public static void main(String[] args) {
        // 1. 创建一个名为 "ClassStructure" 的类,该类具有私有成员变量 "name" 和 "age",以及一个私有化无参构造方法。
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                ClassStructure classStructure = 
						ClassStructure.getClassStructure("测试");
                System.out.println(classStructure);
            }).start();
        }
    }
}

测试结果
在这里插入图片描述

使用this关键字

this关键字用于引用当前对象实例,可以在构造方法内部使用来区分成员变量和局部变量。
可以通过this()调用同一个类中的其他构造方法,这被称为构造方法链。这种调用必须是构造方法的第一条语句。

私有构造方法

类可以拥有私有的构造方法。
不能通过new关键字从类的外部创建此类的实例。
私有构造方法常用于实现单例模式,即确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。

public class ClassStructure {
    private String name;
    private int age;
    //私有化无参构造方法
    private ClassStructure(String name) {
        this.name = name;
    }
    //定义返回对象
    private static ClassStructure classStructure ;
    // 提供全局访问点来获取唯一的对象实例
    public static synchronized ClassStructure getClassStructure(String name) {
        if (classStructure == null) {
            classStructure = new ClassStructure(name);
        }
        return classStructure;
    }

    public String getName() {
        return name;
    }
}

总结

构造方法是Java中用于初始化新创建对象的特殊方法,方法名称必须与类名相同且不声明任何返回类型。
用于程序员在对象实例化时设置初始状态,确保每个对象从一开始就处于有效和一致的状态。
构造方法可以带有参数,以适应不同的初始化需求,并支持重载,即一个类可以拥有多个构造方法,只要它们的参数列表不同。
通过this关键字,可以在构造方法内部引用当前对象实例,或者调用同一个类中的其他构造方法,实现构造方法链。
Java编译器会为没有显式定义构造方法的类提供一个无参的默认构造方法;
一旦定义了至少一个构造方法,这个默认构造方法就不再自动生成。
构造方法还可以使用不同的访问修饰符来控制谁能实例化该类的对象,甚至可以通过私有构造方法限制外部直接实例化,这在实现单例模式等设计模式时非常有用。
W总之,构造方法是面向对象编程的重要组成部分,对于编写健壮、灵活且易于维护的Java应用程序至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/952483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【linux系统之redis6】redis的安装与初始化

下载redis的linux对应的安装包&#xff0c;并上传到linux虚拟机里面 解压压缩包 tar -zxzf redis-6.2.6.tar.gz解压后&#xff0c;进入redis文件 cd redis-6.2.6执行编译 make && make install看到下图&#xff0c;就说明redis安装成功了 默认的安装路径&#xff0c…

STM32-笔记40-BKP(备份寄存器)

一、什么是BKP&#xff08;备份寄存器&#xff09;&#xff1f; 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份域里&#xff0c;当VDD电源被切断&#xff0c;他们仍然由VBAT维持供电。当系统在待机模式下被唤醒&#xff0c;或…

MobaXterm界面的简单介绍

界面全局 “命令行界面”&#xff08;Command Line Interface&#xff0c;简称CLI&#xff09;或“终端”&#xff08;Terminal&#xff09; 在这个界面中&#xff0c;用户可以输入命令来与操作系统进行交互,灰色光标是输入命令的位置 标签栏&#xff08;Tab Bar&#xff09; …

有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗

近期&#xff0c;有多名开发者反馈&#xff0c;收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞&#xff0c;写给AppStore的投诉邮件。 邮件内容主要说的是&#xff0c;腾讯注册了【水印相机】这四个字的商标&#xff0c;所以你们这些在AppStore上的app&…

UI自动化测试保姆级教程①

欢迎来到阿妮莫的学习小屋慢也好&#xff0c;步子小也好&#xff0c;在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…

Linux 下信号的保存和处理

信号的几个状态 信号抵达: 当接收到的信号被处理时, 此时就成为信号的抵达信号的未决: 从信号的产生到信号抵达这个时间段之间, 称为信号未决信号阻塞: 当进程设置了某个信号为阻塞后, 这个进程就不会在接收到这个信号信号忽略: 将信号设置为忽略后, 接收到这个信号, 对这个信…

IntelliJ IDEA中Maven项目的配置、创建与导入全攻略

大家好&#xff0c;我是袁庭新。 IntelliJ IDEA是当前最流行的Java IDE&#xff08;集成开发环境&#xff09;之一&#xff0c;也是业界公认最好用的Java开发工具之一。IntelliJ IDEA支持Maven的全部功能&#xff0c;通过它我们可以很轻松地实现创建Maven项目、导入Maven项目、…

深度学习笔记11-优化器对比实验(Tensorflow)

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 一、导入数据并检查 二、配置数据集 三、数据可视化 四、构建模型 五、训练模型 六、模型对比评估 七、总结 一、导入数据并检查 import pathlib,…

JavaEE之定时器及自我实现

在生活当中&#xff0c;有很多事情&#xff0c;我们不是立马就去做&#xff0c;而是在规定了时间之后&#xff0c;在到该时间时&#xff0c;再去执行&#xff0c;比如&#xff1a;闹钟、定时关机等等&#xff0c;在程序的世界中&#xff0c;有些代码也不是立刻执行&#xff0c;…

Qt学习笔记第81到90讲

第81讲 串口调试助手实现自动发送 为这个名叫“定时发送”的QCheckBox编写槽函数。 想要做出定时发送的效果&#xff0c;必须引入QT框架下的毫秒级定时器QTimer&#xff0c;查阅手册了解详情。 在widget.h内添加新的私有成员变量&#xff1a; QTimer *timer; 在widget类的构造…

【LeetCode】力扣刷题热题100道(16-20题)附源码 容器 子数组 数组 连续序列 三数之和(C++)

目录 1.盛最多水的容器 2.和为K的子数组 3.最大子数组和 4.最长连续序列 5.三数之和 1.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴…

AI多模态技术介绍:视觉语言模型(VLMs)指南

本文作者&#xff1a;AIGCmagic社区 刘一手 AI多模态全栈学习路线 在本文中&#xff0c;我们将探讨用于开发视觉语言模型&#xff08;Vision Language Models&#xff0c;以下简称VLMs&#xff09;的架构、评估策略和主流数据集&#xff0c;以及该领域的关键挑战和未来趋势。通…

jenkins入门13--pipeline

Jenkins-pipeline(1)-基础 为什么要使用pipeline 代码&#xff1a;pipeline 以代码的形式实现&#xff0c;通过被捡入源代码控制&#xff0c; 使团队能够编译&#xff0c;审查和迭代其cd流程 可连续性&#xff1a;jenkins 重启 或者中断后都不会影响pipeline job 停顿&#x…

【线性代数】通俗理解特征向量与特征值

这一块在线性代数中属于重点且较难理解的内容&#xff0c;下面仅个人学习过程中的体会&#xff0c;错误之处欢迎指出&#xff0c;有更简洁易懂的理解方式也欢迎留言学习。 文章目录 概念计算几何直观理解意义PS.适用 概念 矩阵本身就是一个线性变换&#xff0c;对一个空间中的…

SQL多表联查、自定义函数(字符串分割split)、xml格式输出

记录一个报表的统计&#xff0c;大概内容如下&#xff1a; 多表联查涉及的报表有&#xff1a;房间表、买家表、合同表、交易表、费用表、修改记录表 注意&#xff1a;本项目数据库使用的是sqlserver&#xff08;mssql&#xff09;&#xff0c;非mysql。 难点1:业主信息&#…

python学opencv|读取图像(三十)使用cv2.getAffineTransform()函数倾斜拉伸图像

【1】引言 前序已经学习了如何平移和旋转缩放图像&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;二十七&#xff09;使用cv2.warpAffine&#xff08;&#xff09;函数平移图像-CSDN博客 python学opencv|读取图像&#xff08;二十八&#xff0…

C语言数据结构与算法(排序)详细版

大家好&#xff0c;欢迎来到“干货”小仓库&#xff01;&#xff01; 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;无人扶我青云志&#xff0c;我自踏雪至山巅&#xff01;&#xff01;&am…

【竞技宝】CS2:HLTV2024选手排名TOP4-NiKo

北京时间2025年1月11日,HLTV年度选手排名正在持续公布中,今日凌晨正式公布了今年的TOP4选手为G2(目前已转为至Falcons)战队的NiKo。 选手简介 NiKo是一名来自波黑的CS职业选手,现年26岁。作为DOTA2饱负盛名的职业选手,NiKo在CS1.6时代就已经开始征战职业赛场。2012年,年仅15岁…

IOS界面传值-OC

1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 &#xff08;1&#xff09;ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …

树的模拟实现

一.链式前向星 所谓链式前向星&#xff0c;就是用链表的方式实现树。其中的链表是用数组模拟实现的链表。 首先我们需要创建一个足够大的数组h&#xff0c;作为所有结点的哨兵位。创建两个足够大的数组e和ne&#xff0c;一个作为数据域&#xff0c;一个作为指针域。创建一个变…