深入探索: 对象构造的隐藏功能与技巧

news2024/10/5 21:22:45

🧑‍💻CSDN主页:夏志121的主页

📋专栏地址:Java基础+进阶+核心技术专栏

目录

🎃 一、重载

🎄 二、默认字段初始化

🎆 三、无参数的构造器

✨ 四、显式字段初始化

🎊 五、参数名及调用另一个构造器


        对象构造是Java编程中非常重要的一个方面。通过掌握各种构造方法,我们可以更好地管理对象的生命周期,提高代码的可读性和可维护性。

🎃 一、重载

        重载构造器是指在同一个类中定义多个构造器,每个构造器有不同的参数列表。通过使用不同的参数列表,我们可以灵活地创建对象,以适应不同的场景

        例如,我们可以在一个类中定义两个构造器,一个用于创建对象时指定名称和年龄,另一个用于创建对象时只指定名称

public class Person {
    String name;
    int age;

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

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

通过重载构造器,我们可以使用不同的参数列表来创建不同的对象。

注意:Java允许重载任何方法,而不只是构造方法。返回类型不是方法签名的一部分。也就是说,不能有两个名字相同、参数类型也相同却有不同返回类型的方法。

🎄 二、默认字段初始化

        默认字段初始化是指在定义类时为字段设置默认值。如果我们没有在构造器中为字段设置初始值,那么Java会使用默认值来初始化字段。例如,对于整数类型的字段,其默认值为0;对于布尔类型的字段,其默认值为false

public class Person {
    String name; // 默认值为null
    int age; // 默认值为0
    boolean isMale; // 默认值为false
}

通过默认字段初始化,我们可以在定义类时为字段设置默认值,从而简化代码

注意:方法中的局部变量必须明确地初始化。但是在类中,如果没有初始化类中的字段,将会自动初始化为默认值(0,false或null

🎆 三、无参数的构造器

        无参数构造器是指没有参数的构造器。如果我们没有定义任何构造器,Java会自动为我们生成一个无参数的构造器。如果我们定义了其他构造器,但没有定义无参数的构造器,那么我们就无法使用无参数构造器来创建对象

public class Person {
    String name;
    int age;

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

        在上面的示例中,我们定义了一个带有参数的构造器,但没有定义无参数的构造器。因此,如果我们尝试使用无参数构造器来创建Person对象,编译器会报错

✨ 四、显式字段初始化

        显式字段初始化是指在构造器中为字段设置初始值。通过显式字段初始化,我们可以在构造器中为字段设置初始值,而不是使用默认值。

public class Person {
    String name;
    int age;

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

    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }
}

        在上面的示例中,我们定义了一个无参数的构造器,并在其中使用显式字段初始化为字段设置初始值。

🎊 五、参数名及调用另一个构造器

        参数名是指在构造器中为参数设置默认值。通过为参数设置默认值,我们可以在创建对象时省略某些参数,从而提高代码的灵活性。

public class Person {
    String name;
    int age;

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

    public Person(String name) {
        this(name, 0);
    }
}

        在上面的示例中,我们定义了一个带有两个参数的构造器,并使用第二个构造器来为第二个参数设置默认值。这样,当我们使用第二个构造器创建对象时,可以省略第二个参数

注意:这种构造器调用另一个构造器一定要是第一个语句

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue(路由插件)

一、介绍路由 1. 路由就是一组key-value的对关系,多个路由需要经过路由器进行管理 2. 主要应用在SPA(单页面应用) 在一个页面展示功能之间的跳转 特点: 当跳转时候不进行页面刷新路径随着变化展示区变化但是不开启新的页签 …

总结丨SGAT单基因关联分析工具,一文上手使用

SGAT是一个免费开源的单基因分析工具,基于Linux系统实现自动化批量处理,能够快速准确的完成单基因和表型的关联分析,只需要输入基因型和表型原始数据,即可计算出显著关联的SNP位点,并自动生成结果报告。 前段时间陆续的…

YOLOv5白皮书-第Y4周:common.py文件解读

目录 0.导入需要的包和基本配置1.基本组件1.1 autopad1.2 Conv1.3 Focus1.4 Bottleneck1.5 BottleneckCSP1.6 C31.7 SPP1.8 Concat1.9 Contract、Expand 2.重要类2.1 非极大值抑制(NMS)2.2 AutoShape2.3 Detections2.4 Classify 🍨 本文为&am…

【头歌实训】【基于 Logisim 的 RISC-V 处理器设计 · 终】

真的恶心,我哭死 目录 前言 一、说明 1、参考 2、建议 二、处理器设计 三、Control器件设计 1、加速经常性事件,提高效率 2、控制信号设置 1.RegWEn 2.IMMSel 3.BSel 4.ALUSel & WBSel 5.MemWEn 6.PCSel & ASel 7.ALUB 总结…

【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库

一、Introduction1.1 C语言标准库1.2 历代C语言标准1.3 主流C语言编译器 二、C语言标准库2.1 常用标准头文件2.2 常用标准静态库 三、windows平台四、Linux平台五、常用头文件功能速览5.1 通用常用头文件01. stdio.h——标准输入输出02. stdlib.h——内存管理与分配、随机数、字…

Git常用命令reset和revert

Git常用命令reset和revert 1、reset 用于回退版本,可以指定退回某一次提交的版本。 checkout 可以撤销工作区的文件,reset 可以撤销工作区/暂存区的文件。 reset 和 checkout 可以作用于 commit 或者文件,revert 只能作用于 commit。 命…

为什么 String#equals 方法在做比较时没有使用 hashCode

一个疑问的引入 我之前出于优化常数项时间的考虑,想当然的认为 String#equals 会事先使用 hashCode 进行过滤 我想像中的算法是这样的 当两个 hashCode 不等时,直接返回 false(对 hash 而言,相同的输入会得到相同的输出&#x…

数据安全复合治理框架和模型解读(0)

数据治理,数据安全治理行业在发展,在实践,所以很多东西是实践出来的,哪有什么神仙理论指导,即使有也是一家之说,但为了提高企业投产比,必要的认知是必须的,当前和未来更需要专业和创新。数据安全治理要充分考虑现实数据场景,强化业务安全与数据安全治理,统一来治理,…

学会了程序替换,我决定手写一个简易版shell玩一玩...

文章目录 💐专栏导读💐文章导读🐧程序进程替换🐦替换原理🐦替换函数🐔观察与结论🐔函数命名理解 🐧myshell编写🔔代码展示🔔效果展示 🐧myshell_p…

Vue电商项目--分页器制作

分页器静态组件 分页这个组件&#xff0c;不单单是一个页面用到了。多个页面同时用它,因此我们可以封装成一个全局组件 需要将这个分页结构拆分到components 通用的分页组件Pagination <template><div class"pagination"><button>1</butto…

【C语言】函数规则及入门知识

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 ⚡注&#xff1a;此篇文章的 部分内容 将根据《高质量 C/C 编程指南》 —— 林锐 进行说明。该部分将用橙色表示。 &#x1f525;该篇…

新手建站:使用腾讯云轻量服务器宝塔面板搭建WP博客教程

腾讯云轻量应用服务器怎么搭建网站&#xff1f;太简单了&#xff0c;轻量服务器选择宝塔Linux镜像&#xff0c;然后在宝塔面板上添加站点&#xff0c;以WordPress建站为例&#xff0c;腾讯云服务器网来详细说下腾讯云轻量应用服务器搭建网站全流程&#xff0c;包括轻量服务器配…

html5视频播放器代码实例(含倍速、清晰度切换、续播)

本文将对视频播放相关的功能进行说明&#xff08;基于云平台&#xff09;&#xff0c;包括初始化播放器、播放器尺寸设置、视频切换、倍速切换、视频预览、自定义视频播放的开始/结束时间、禁止拖拽进度、播放器皮肤、控件按钮以及播放控制等。 图 / html5视频播放器调用效果&a…

java web 基础springboot

1.SprintBootj集成mybaits 连接数据库 pom.xml文件添加依赖 <!-- mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!-- …

学习HCIP的day.09

目录 一、BGP&#xff1a;边界网关路由协议 二、BGP特点&#xff1a; 三、BGP数据包 四、BGP的工作过程 五、名词注解 六、BGP的路由黑洞 七、BGP的防环机制—水平分割 八、BGP的基本配置 一、BGP&#xff1a;边界网关路由协议 是一种动态路由协议&#xff0c;且是…

花果山博客

1&#xff1a;前言 2&#xff1a;项目介绍 3&#xff1a;统一返回结果 4&#xff1a;登录功能实现 前言 简单介绍一个写这个博客的目的。 因为之前学开发都是学完所需的知识点再去做项目&#xff0c;但是这时候在做项目的过程中发现以前学过的全忘了&#xff0c;所以为了减少这…

Vue3导入Element-plus方法

先引入依赖 npm install element-plus --savemain.js中要引入两个依赖 import ElementPlus from element-plus; import "element-plus/dist/index.css";然后 这个东西 我们最好还是挂载vue上 所以 还是 createApp(App).use(ElementPlus)然后 我们可以在组件上试一…

腾讯云轻量服务器镜像安装宝塔Linux面板怎么使用?

腾讯云轻量应用服务器宝塔面板怎么用&#xff1f;轻量应用服务器如何安装宝塔面板&#xff1f;在镜像中选择宝塔Linux面板腾讯云专享版&#xff0c;在轻量服务器防火墙中开启8888端口号&#xff0c;然后远程连接到轻量服务器执行宝塔面板账号密码查询命令&#xff0c;最后登录和…

从零搭建微服务-认证中心(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 创建新项目 MingYue Idea 创建 maven 项目这…

操作系统第五章——输入输出管理(下)

提示&#xff1a;枕上诗书闲处好&#xff0c;门前风景雨来佳。 文章目录 5.3.1 磁盘的结构知识总览磁盘 磁道 扇区如何从磁盘中读/写数据盘面 柱面磁盘的物理地址磁盘的分类知识回顾 磁盘调度算法知识总览磁盘的读写操作需要的时间先来先服务算法FCFS最短寻找时间优先SSTF扫描算…