项目案例作业2

news/2025/10/8 23:05:43/文章来源:https://www.cnblogs.com/z277/p/19130257
  1. 案例中的 setter/getter 模式与封装性(姓名:周广磊 学号:202421336092)
    2.1 什么是 setter/getter?
    setter 方法(也称为修改器方法)和 getter 方法(也称为访问器方法)是面向对象编程中用于操作类私有属性的公共方法。在学生管理系统的Student类中,setter 方法用于设置私有属性的值,其命名通常以 “set” 开头,后接属性名(首字母大写),且方法参数类型与对应属性的类型一致,无返回值;getter 方法用于获取私有属性的值,命名通常以 “get” 开头,后接属性名(首字母大写),无参数,返回值类型与对应属性的类型一致。
    以Student类的name属性为例,对应的 setter 方法为public void setName(String name),getter 方法为public String getName()。外部类若要修改学生姓名,需调用setName方法并传入合法的姓名参数;若要获取学生姓名,则调用getName方法即可得到姓名字符串。
    2.2 setter/getter 有什么用?
    配合封装实现属性操作:类的私有属性无法被外部直接访问,setter/getter 作为公共接口,为外部提供了安全的属性访问通道。没有 setter/getter,封装性将无法落地 —— 要么为了方便访问将属性设为public,破坏封装;要么完全禁止外部访问属性,导致类的功能无法正常使用。因此,setter/getter 是封装性的 “桥梁”,既保证了属性的隐藏,又满足了外部对属性的合理操作需求。
    实现数据过滤与校验:在 setter 方法中可添加业务逻辑校验,确保属性值符合实际需求。例如,在Student类的setMajor(String major)方法中,可添加判断 “若 major 为 null 或空字符串,则默认设置为‘未分配专业’”,避免学生专业信息为空的情况;在setStudentId(String studentId)方法中,可校验学号格式(如 “是否为 10 位数字”),若不符合格式则抛出异常,保证学号信息的规范性。
    支持属性的只读或只写控制:根据业务需求,可灵活控制是否提供 setter 或 getter 方法。例如,学生的学号在创建后不允许修改,此时可只提供getStudentId()方法,不提供setStudentId()方法,实现学号的 “只读” 特性;若某个属性(如 “临时备注”)只需允许外部修改,无需外部读取,则可只提供 setter 方法,不提供 getter 方法,实现属性的 “只写” 特性。
    2.3 怎么自动生成 setter/getter?
    在主流的 Java 开发工具(如 IntelliJ IDEA、Eclipse)中,均可通过工具自带功能自动生成 setter/getter 方法,无需手动编写,具体步骤如下(以 IntelliJ IDEA 为例):
    新建Student类,并在类中定义私有属性(如private String studentId; private String name;);
    将光标定位到类内部的空白处,右键点击,在弹出的菜单中选择 “Generate”(或使用快捷键Alt + Insert);
    在 “Generate” 下拉菜单中,选择 “Getter and Setter” 选项;
    在弹出的 “Select Fields to Generate Getters and Setters” 窗口中,勾选需要生成 setter/getter 方法的属性(可通过 “Select All” 按钮勾选所有属性),然后点击 “OK”;
    工具将自动在类中生成所选属性对应的 setter 和 getter 方法,例如:
    public String getStudentId() {
    return studentId;
    }
    public void setStudentId(String studentId) {
    this.studentId = studentId;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }

通过工具自动生成 setter/getter 方法,不仅能避免手动编写时可能出现的语法错误(如方法名拼写错误、参数类型不匹配等),还能极大提高开发效率,尤其在类的属性较多时,优势更为明显。
3. 案例中某些类的 toString () 方法(姓名:周广磊 学号:202421336092)
3.1 toString 方法有什么用?
toString()方法是用于返回对象的字符串表示形式的方法。在默认情况下,若未重写toString()方法,当我们打印一个对象(如System.out.println(student))时,输出的结果是 “类的全限定名 @对象的哈希码十六进制表示”(例如com.studentmanagement.Student@1b6d3586),这种输出形式对开发者而言几乎没有实际意义,无法直观了解对象的具体属性值。
而重写toString()方法后,可自定义对象的字符串输出格式,使其包含对象的核心属性信息。例如,在Student类中重写toString()方法后,打印student对象时,输出结果可能为 “Student {studentId='2023001', name=' 张三 ', age=20, major=' 计算机科学与技术 '}”,开发者可直接通过输出结果获取学生的关键信息,便于代码调试、日志记录以及对象信息的展示。
3.2 toString 一般应包含什么内容?
toString()方法的返回内容应遵循 “简洁、清晰、包含核心信息” 的原则,通常包含对象的关键属性值,避免包含无关或冗余信息。以学生管理系统中的类为例:
Student 类:应包含学生的唯一标识(学号studentId)、基本信息(姓名name、年龄age)以及核心业务信息(专业major),例如返回格式为 “Student {studentId='xxx', name='xxx', age=xx, major='xxx'}”;
Teacher 类:若系统中包含Teacher类,其toString()方法可包含教师编号teacherId、姓名name、所属部门department、教授课程course等信息,返回格式为 “Teacher {teacherId='xxx', name='xxx', department='xxx', course='xxx'}”;
Course 类:若包含Course类,可包含课程编号courseId、课程名称courseName、学分credit、授课教师teacher(可调用teacher对象的toString()方法或仅获取教师姓名)等信息,返回格式为 “Course {courseId='xxx', courseName='xxx', credit=xx, teacher='xxx'}”。
需要注意的是,toString()方法的返回内容应避免包含敏感信息(如学生的身份证号、联系电话等),同时确保属性值的格式统一,便于阅读和后续处理。
3.3 toString () 方法从哪里来?
toString()方法来源于 Java 中的根类 ——java.lang.Object类。在 Java 中,所有的类(无论是自定义类还是系统提供的类)都默认直接或间接继承自Object类,因此Object类中的方法(包括toString()、equals()、hashCode()等)会被所有类继承。
Object类中toString()方法的默认实现代码如下:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

该实现返回的字符串由 “类的全限定名”“@符号” 和 “对象哈希码的十六进制表示” 三部分组成,如前文所述,这种默认输出对开发者意义不大。因此,在实际开发中,我们通常会在自定义类(如Student、Teacher、Course等)中重写toString()方法,以实现自定义的对象字符串表示形式。
与 setter/getter 方法类似,toString()方法也可通过开发工具自动生成(以 IntelliJ IDEA 为例):在类内部右键点击,选择 “Generate”→“toString ()”,然后勾选需要包含在toString()方法中的属性,工具将自动生成重写后的toString()方法代码,避免手动编写时的错误和繁琐操作。

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

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

相关文章

P5664 [CSP-S2019] Emiya 家今天的饭 题解

题目传送门 洛谷 P5664 前言 本题解为作者整合了自己学习其他题解后为自己写的用以复习的笔记,不喜勿喷谢谢,但是有逻辑错误或语言不清晰之处欢迎提出! 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 \(n\) 种烹饪…

网站建设艾瑞市场分析英国设计网站

目录 Optional 的方法 Optional实例 《天道》丁元英经典语录 所谓真经,就是能够达到寂空涅盘的究竟法门。可悟不可修。修为成佛,在求。悟为明性,在知。修行以行制性。悟道以性施行。觉者由心生律;修者以律制心,不落恶果者有信无证,住因住果,住念住心,如是生灭。不昧…

谷歌网站开发用什么框架next wordpress

近日,JetBrains 对外发布两项重要产品更新:专为云端和其他服务器打造的远程开发解决方案,以及轻量级编辑器Fleet。 为IntelliJ 平台引入远程开发支持 在近期陆续发布的2021.3 版本的各 IDE 中,JetBrains 向 IntelliJ 平台添加了远…

PWN手的成长之路-11-CISCN 2019华北 PWN1-栈溢出

远程连接以下靶机,看看交互。file 查看程序文件。checksec 查看程序文件安全属性。开启了 NX 保护,栈上不可执行。IDA 打开程序文件。查看 ain 函数,发现调用了 func 函数。查看 func 函数。这里需要判断 v2 是否等…

sensitive-word:一个简单易用的敏感词过滤框架

这篇文章,分享一个开源项目:sensitive-word 。Github 地址:https://github.com/houbb/sensitive-wordsensitive-word 是一个功能强大的 Java 敏感词过滤框架,它不仅提供了基础的敏感词检测功能,还支持单词标签分类…

回归学习——包机制

回归学习 包机制 包的本质就是文件夹,用来区别类名的命名空间。一个文件在写的时候要把包写在最前面,一般利用公司倒置作为包名,为了能够使用一个包的成员,我们需要在Java程序中明确导入该包,方式为使用‘import语…

哈尔滨中小企业网站制作长沙知名网站

无论是前面学习的序列式容器,还是关联式容器,要想实现遍历操作,就必须要用到该类型容器的迭代器。当然,map 容器也不例外。C++ STL 标准库为 map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,map 容器迭代器只能进行 ++p、p++、--p、p--、*p 操作,并且迭…

网站建设职责网站源码大全

一、需求 用户输入四个季度的数据&#xff0c;根据数据生成柱形统计图&#xff0c;浏览器预览效果如下 二、完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&q…

wordpress动漫主题秦皇岛seo排名

二叉树相关推荐 107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II总结 107.二叉树的层次遍历II 切片本质是一个结构体&#xff0c;包含…

vue 组件的常见8种通信方式

1、通过props传递‌,emit触发自定义事件: 父传子:子组件中通过props接收父组件传递的数据。 ‌子传父:子组件通过emit触发一个事件,父组件监听这个事件来接收数据。 vue2:通过props和$emit vue3:script中setup,…

技能训练企业网站建设可行性分析企业网站建设 百度文库

文章目录 参考环境常量数组不可变性版本限制 constdefine()构造大小写不敏感的常量$case_insensitive 参数PHP7.3PHP8 若 define() 在不支持常量数组的版本中运行 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型、ChatGPTPHP 手册PHP Man…

251008

251008美好的一天从现在开始

vue一键安装

vue一键安装 Microsoft Windows [版本 10.0.26100.4946] (c) Microsoft Corporation。保留所有权利。F:\vue_flask_project\vue_flask_project_one\vue>npm install --global vue-cli npm warn deprecated inflight…

佛山网站建设找哪家wordpress 中文版下载

内联式css样式&#xff0c;直接写在现有的HTML标签中 CSS样式可以写在哪些地方呢&#xff1f;从CSS 样式代码插入的形式来看基本可以分为以下3种&#xff1a;内联式、嵌入式和外部式三种。这一小节先来讲解内联式。 内联式css样式表就是把css代码直接写在现有的HTML标签中&am…

权威的网站建设排行榜男科医院哪家正规医院

模拟伪造请求 方法一&#xff1a;打断点模拟HTTP请求 1、浏览器页面填好内容后&#xff08;不要操作提交&#xff09;&#xff0c;打开fiddler&#xff0c;设置请求前断点&#xff0c;点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在页面上点…

做网站卖电脑oss cdn wordpress

目录 一、Vite概述 二、Vite构建Vue3工程化项目 三、ViteVue3项目目录结构 四、ViteVue3项目组件&#xff08;SFC入门&#xff09; 五、ViteVue3样式导入方式 六、ViteVue3响应式数据和setup语法糖 一、Vite概述 Vite是一种新型前端构建工具,能够显著提升前端开发体验;Vite结合…

网站页面设计要求wordpress快速登陆插件

动机(Motivate)&#xff1a; 在软件构建过程中&#xff0c;一个请求可能被多个对象处理&#xff0c;但是每个请求在运行时只能有一个接受者&#xff0c;如果显示指定&#xff0c;将必不可少地带来请求发送者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受…

如何使用 ManySpeech 调用 SenseVoiceSmall 模型

一、模型与组件简介SenseVoice 模型多语言音频理解开源模型,支持语音识别、语种识别、情感识别等功能,适用于中、粤、英、日、韩等语言。 ManySpeech.AliParaformerAsrC# 语音识别推理库,支持 paraformer-large、pa…

北京免费发布企业信息网站建设网站哪家强

vmware与windows共享文件夹 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 虚拟工具安装好之后&#xff0c;我们就可以在windows和linux设置一个共享目录了,继续看图干活。 设置好共享目录以后&#xff0c;打开终端输入以下命令&#xff0c;就可以再…

维基框架 (Wiki Framework) v1.1.2 | 企业级微服务开发框架

Release Notes 版本修复日志【修复】修复HTTPS请求参数ContentType创建错误问题; 【修复】修复用户接口类 IUserDetailsService 被删除问题; 【修复】修复Spring Boot 全局响应处理增加对返回字符串兼容; 【修复】修…