Java面向对象 构造器的重载

目录

  • 创建类
    • 测试构造器的重载
    • 分析

创建类

public class Person02 {
    //属性:
    String name;
    int age;
    double height;
    //空构造器
    public Person02(){
    }
    public Person02(String name,int age,double height){
        //当形参名字和属性名字重名的时候,会出现就近原则:
        //在要表示对象的属性前加上this.来修饰 ,因为this代表的就是你创建的那个对象
        this.name = name;
        this.age = age;
        this.height = height;
    }
    public Person02(String a,int b){
        name = a;
        age = b;
    }
    //方法:
    public void eat(){
        System.out.println("我喜欢吃饭");
    }
}

这段代码定义了一个名为Person02的Java类,这个类具有以下组成部分:

  1. 属性

    • name:一个String类型的属性,用于存储人的姓名。
    • age:一个int类型的属性,用于存储人的年龄。
    • height:一个double类型的属性,用于存储人的身高。
  2. 构造器

    • 空构造器:这是一个没有任何参数的构造器。
    • Person02(String name, int age, double height):这是一个带参数的构造器,它接受三个参数(姓名、年龄和身高)并使用这些参数的值初始化对象的相应属性。这里使用了this关键字来区分参数和属性。当参数和属性的名称相同时,使用this关键字可以明确表示你想要引用的是对象的属性而不是参数。
    • Person02(String a, int b):这是另一个带参数的构造器,它接受两个参数(可能代表姓名和年龄),并使用这些参数的值初始化对象的相应属性。
  3. 方法

    • eat():这是一个公共方法,它没有参数。当这个方法被调用时,它会输出“我喜欢吃饭”。

这个类提供了多种方式来创建Person02对象,并为其属性赋值。例如,你可以使用空构造器创建一个所有属性都使用默认值的对象,或者使用带两个参数的构造器创建一个只设置了姓名和年龄的对象,而身高保持默认值。使用带三个参数的构造器则可以同时设置所有属性。

测试构造器的重载

public class Test02 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        /*
        1.一般保证空构造器的存在,空构造器中一般不会进行属性的赋值操作
        2.一般我们会重载构造器,在重载的构造器中进行属性赋值操作
        3.在重载构造器以后,假如空构造器忘写了,系统也不会给你分配默认的空构造器了,那么你要调用的话就会出错了。
        4. 当形参名字和属性名字重名的时候,会出现就近原则:
        在要表示对象的属性前加上this.来修饰 ,因为this代表的就是你创建的那个对象
         */
        Person02 p = new Person02();
        /*p.age = 20;
        p.name = "HaHa";
        p.height = 170.4;*/
        Person02 p2 = new Person02("HaHa",18,170.4);
        System.out.println(p2.age);
        System.out.println(p2.height);
        System.out.println(p2.name);
    }
}

在这里插入图片描述

分析

这段Java代码定义了一个名为Test02的类,该类包含一个main方法作为程序的入口点。在main方法中,代码创建了两个Person02类的对象,并对它们进行操作。以下是对代码的详细解释:

  1. Person02 p = new Person02();: 这行代码创建了一个Person02类的对象p,并使用无参数的构造器(空构造器)进行初始化。由于空构造器中没有进行任何属性赋值操作,因此对象p的属性将保持它们的默认值(namenullage0height0.0)。

  2. 注释掉的部分代码:这部分代码被注释掉了,但如果取消注释,它将为对象p的属性赋值。

    /*
    p.age = 20;
    p.name = "HaHa";
    p.height = 170.4;
    */
    
  3. Person02 p2 = new Person02("HaHa", 18, 170.4);: 这行代码创建了另一个Person02类的对象p2,并使用带有三个参数的构造器进行初始化。这个构造器接收姓名、年龄和身高作为参数,并将这些值赋给对象p2的相应属性。

  4. 接下来的三行代码打印对象p2的属性值:

    System.out.println(p2.age);    // 打印p2的年龄
    System.out.println(p2.height); // 打印p2的身高
    System.out.println(p2.name);   // 打印p2的姓名
    

    输出将是:

    20
    170.4
    HaHa
    

注释中还提到了一些关于Java构造器的重要概念:

  • 保证空构造器的存在:通常,为了确保类的可实例化性,会提供一个无参数的空构造器。这样,即使不提供任何参数,也可以创建类的对象。
  • 重载构造器:可以通过定义多个构造器来重载它们,每个构造器有不同的参数列表。这使得在创建对象时能以不同的方式初始化对象的属性。
  • 忘记写空构造器的情况:如果类中定义了其他构造器,但没有显式地定义空构造器,那么系统不会自动提供一个默认的空构造器。如果尝试调用不存在的空构造器,编译器会报错。
  • 使用this关键字:当构造器的参数名和类的属性名相同时,可以使用this关键字来区分它们。this引用当前对象,所以this.属性名表示的是对象的属性,而不是构造器的参数。

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

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

相关文章

Excel——重复项处理

一、高亮重复项 选择需要高亮重复项的列/单元格 选择【数据】——【重复项】—— 【高亮重复项】 如果高亮重复项的数据较长,例如:身份证号、银行卡,可以勾选下列选项,能够精准检查重复项。 结果如下所示 如果想要清除高亮的重复…

项目02《游戏-10-开发》Unity3D

【完成本集功能后共享1-10集整套代码】 基于 项目02《游戏-09-开发》Unity3D , 任务:传送至其他场景, 首先在场景中加入传送门, 设置人物标签, using UnityEngine; using UnityEngine.SceneManagement; u…

12.0 Zookeeper 数据同步流程

在 Zookeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性。 ZAB 协议分为两部分: 消息广播崩溃恢复 消息广播 Zookeeper 使用单一的主进程 Leader 来接收和处理客户端所有事务请求,并采用 ZAB 协议的原子广播协议,将事务请求…

docker 运行jar包 指定配置文件

要在Docker中运行JAR包并指定配置文件,你可以创建一个Dockerfile来定义你的容器环境,并在其中指定如何运行JAR包和配置文件。下面是一个简单的例子,展示了如何在Dockerfile中设置这些配置: 第一步:创建 Dockerfile文件…

RCS系统之:机器人状态

在设计RCS系统平台时,机器人总共设计状态有: 离线模式; 如图,18号机器人呈灰黑色,表示机器人没有上电状态 工作模式; 如图,10号机器人成绿色,表示机器人处于工作模式,等…

SQL--约束

概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确、有效性和完整性。 分类: 约束演示 上面我们介绍了数据库中常见的约束,以及约束涉及到的关键字,那这些约束我们…

IDEA创建Java类时自动添加注释(作者、年份、月份)

目录 IDEA创建Java类时自动添加注释(作者、年份、月份)如图: IDEA创建Java类时自动添加注释(作者、年份、月份) 简单记录下,IDEA创建Java类时自动添加注释(作者、年份、月份)&#…

Mysql MGR搭建

一、架构说明 1.1 架构概述 MGR(单主)VIP架构是一种分布式数据库架构,其中数据库系统采用单主复制模式, 同时引入虚拟IP(VIP)来提高可用性和可扩展性。 这种架构结合了传统主从复制和虚拟IP技术的优势,为数据库系统提供了高可用、 高性能和…

Python HTTP隧道在远程通信中的应用:穿越网络的“魔法门”

在这个数字化时代,远程通信就像是我们日常生活中的“魔法门”,让我们可以随时随地与远方的朋友、同事或服务器进行交流。而在这扇“魔法门”的背后,Python HTTP隧道技术发挥着举足轻重的作用。 想象一下,你坐在家里的沙发上&…

python二维数组初始化的一个极其隐蔽的bug(浅拷贝)

初始化一个三行三列的矩阵 m n 3初始化方式1 a [[0 for i in range(m)] for j in range(n)]初始化方式2 b [] row [0 for i in range(0,m)] for i in range(0,n):b.append(row)分别输出两个初始化的结果 for row in a:print(row) for row in b:print(row)当前的输出为…

龙测科技荣获2023年度技术生态构建奖

本月,由极客传媒举办的“有被Q到”2024 InfoQ 极客传媒合作伙伴年会顺利举办,龙测科技喜获2023年度技术生态构建奖。 InfoQ是首批将Node.js、HTML5、Docker等技术全面引入中国的技术媒体之一,秉承“扎根社区、服务社区、引领社区”的理念&…

【element-ui】el-select下拉框el-date-picker弹出框定位问题解决方案

问题描述: 项目开发过程中发现el-select和el-date-picker弹出框显示时候,滚动屏幕,导致弹出框定位出现问题。 首先考虑到看一下element-ui官网提供的api,如下图 1、select提供了popper-append-to-body属性的配置 代码如下&#x…

百面嵌入式专栏(面试题)进程管理相关面试题1.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍进程管理相关面试题 。 一、进程管理相关面试题 进程是什么?操作系统如何描述和抽象一个进程?进程是否有生命周期?如何标识一个进程?进程与进程之间的关系如何?Linux操作系统的进程0是什么?Linux操…

C++函数分文件编写之VScode版

VScode实现函数的分文件编写 1.下载插件创建项目2.分文件编写内容3.修改主函数文件名 我在分享内容时经常用的软件是VScode,相信有些内存敏感或需要VScode便利性的小伙伴也是更愿意使用VScode。那么接下来我们就盘一盘怎样使用VScode实现分文件编写。 1.下载插件创建…

解决maven 在IDEA 下载依赖包速度慢的问题

1.idea界面双击shift键 2.打开setting.xml文件 复制粘贴 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

linux centos安装neofetch

简介 neofetch是一个命令行工具&#xff0c;可以用来显示系统的基本信息和硬件配置。它支持多种操作系统&#xff0c;包括Linux、macOS和Windows等。 安装 增加yum源 curl -o /etc/yum.repos.d/konimex-neofetch-epel-7.repo https://copr.fedorainfracloud.org/coprs/konime…

golang windows 环境搭建 环境配置

golang windows 环境搭建 环境配置 Golang学习之路一环境搭建 MacBook Linux 树莓派raspberrypi安装Golang环境 官网下载地址: https://go.dev/dl/ https://golang.google.cn/dl/ 下载对应系统版本&#xff0c;例如windows 64位系统&#xff0c;下载&#xff1a;xxx.window…

如何在苹果Mac上进行分屏,多任务处理?

Apple 在 macOS Catalina 中引入了 Split View&#xff0c;让您可以同时查看两个应用程序。如果同时处理多个应用程序&#xff0c;但在它们之间切换时感到沮丧&#xff0c;小编教给大家在 Macbook Pro/Air 或 iMac 上使用分屏功能流畅地进行多任务处理。 注意&#xff1a;您可…

【力扣 51】N 皇后(回溯+剪枝+深度优先搜索)

按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种…

Vue3父子组件传参

一&#xff0c;父子组件传参&#xff1a; 应用场景&#xff1a;父子组件传参 Vue3碎片&#xff1a;defineEmits&#xff0c;defineProps&#xff0c;ref&#xff0c;reactive&#xff0c;onMounted 1.父组件传子组件 a.父组件传参子组件 import { ref} from vue import OnChi…