Java之封装(学习笔记)
封装定义(个人理解:)
封装就像电视遥控器的按钮,比如音量键,对于我们使用者来说就是可以直接按下去调控音量,对于代码写作者来说就是封装了调控音量的方法,使得我们只能去调控,不能改变内部。
封装的实现步骤:
将属性进行私有化private 【不能直接修改属性】
提供一个公共的(public)set方法,用户堆属性判断并赋值
public void setXxx(类型 参数名) { // Xxx -> 表示某个属性//加入数据验证的业务逻辑属性 = 参数名; }提供一个公共的(public)get方法,用于获取属性的值
public 数据类型 getXxx() { //权限判断,Xxx某个属性return xx; }
问题样例:
设置一个小程序,不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认年龄18岁,必须在1-100岁之间。年龄,工资不能直接查看,name的长度在2-6个字符之间。
代码示例:
import java.util.Scanner;public class text01 {public static void main(String[] args) {Person person1 = new Person("simth",200,1400);System.out.println(person1.info());}
}class Person{public String name;private int age;private double salary;public Person() {}public Person(String name, int age, double salary) {
// this.name = name;
// this.age = age;
// this.salary = salary;setName(name);setAge(age);setSalary(salary);}public String getName() {return name;}public void setName(String name) {if(name.length() >= 2 && name.length() <= 6)this.name = name;else{System.out.println("您输入的名字不在2-6个字符之间,给您默认名字");this.name = "默认名";}}public int getAge() {return age;}public void setAge(int age) {if(age >= 1 && age <= 100)this.age = age;else{System.out.println("您输入的年龄不在1-100岁之间,给您默认年龄18岁");this.age = 18;}}public double getSalary() {System.out.println("您需要输入6位密码才能得到工资显示:");Scanner sc = new Scanner(System.in);int res = sc.nextInt();if(res == 123456)return salary;else{System.out.println("抱歉您输入的密码不对。查看不了工资~ 返回值:0.0");this.salary = 0.0;return salary;}}public void setSalary(double salary) {this.salary = salary;}public String info(){this.getSalary();return "name:" + name + ",\tage:" + age + ",\tsalary:" + salary;}
}
构造器与封装
还是上面的案例,当我们需要有构造器的时候,比如:
那么怎么解决这种情况呢?
如果有错误欢迎小伙伴留言,这里仅是学习参考笔记,喜欢的留个关注再走吧~
相关文章:
Java之封装(学习笔记)
封装定义(个人理解:) 封装就像电视遥控器的按钮,比如音量键,对于我们使用者来说就是可以直接按下去调控音量,对于代码写作者来说就是封装了调控音量的方法,使得我们只能去调控,不能改…...
每天学一个 Linux 命令(27):head
可访问网站查看,视觉品味拉满: http://www.616vip.cn/27/index.html head 是 Linux 中用于查看文件开头部分内容的命令,默认显示文件前 10 行,适合快速预览文件结构或日志头部信息。 命令格式 head [选项] [文件]常用选项 选项说明-n <行数>指定显示前 N 行(如…...
山东大学软件学院创新项目实训开发日志(20)之中医知识问答自动生成对话标题bug修改
在原代码中存在一个bug:当前对话的标题不是现有对话的用户的第一段的前几个字,而是历史对话的第一段的前几个字。 这是生成标题的逻辑出了错误: 当改成size()-1即可...
论文阅读:2024 ICML Is DPO Superior to PPO for LLM Alignment? A Comprehensive Study
Is DPO Superior to PPO for LLM Alignment? A Comprehensive Study https://www.doubao.com/chat/3506902534329346 https://arxiv.org/pdf/2404.10719 速览 这篇论文主要探讨了大语言模型对齐中两种主流方法——**DPO(直接偏好优化)和PPO…...
2025年人工智能指数报告:技术突破与社会变革的全景透视
《2025年人工智能指数报告》作为斯坦福大学人工智能实验室与多方合作的年度重磅研究,以超过千页的篇幅全景式展现了人工智能技术在全球范围内的发展轨迹与深远影响。这份报告不仅延续了对AI技术性能、科研进展与产业应用的追踪,更首次深入探讨了AI硬件的…...
【Python笔记 01】变量、标识符
一、 变量 1、变量的作用 计算机存储空间,用于保存数据。 2、定义变量的格式 格式:变量名 值 示例: num1 3 # num1就是一个变量,保存蛋糕的价格 num2 10 #num2也是一个变量,保存雪碧的价格 total num1 num2 …...
WebSocket启用备忘
一:引入依赖: <!--WebSocket专用--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>org…...
文件管理详解(曼波脑图版)
(✪ω✪)曼波来啦!文件管理的知识曼波这就为你详细讲解哟~ 记得要准备好小本本做笔记哦!(๑˃̵ᴗ˂̵)و 🌟 文件读写操作 🌟 // 最可爱的文件读取写法 (✧∇✧) try (BufferedReader reader new BufferedReader(new FileRead…...
学习笔记十九——Rust多态
🧩 Rust 多态终极通俗指南 📚 目录导航 多态一句话概念静态分派 vs 动态分派——根本差异参数化多态(泛型) 3.1 函数里的泛型 3.2 结构体里的泛型 3.3 方法里的泛型 3.4 枚举里的泛型Ad hoc 多态(特例多态࿰…...
在 Linux 上部署 .NET Core 应用并配置为开机自动启动
在本文中,我们将详细介绍如何在 Linux 系统上部署 .NET Core 应用程序,并配置为开机自动启动。以下是一步一步的详细部署过程,适用于将 .NET Core Web 应用部署到生产环境中。 1. 安装 .NET 运行时和 SDK 首先,确保 Linux 系统上…...
dubbo SPI插件扩展点使用
参考:SPI插件扩展点 Dubbo SPI概述 使用IoC容器帮助管理组件的生命周期、依赖关系注入等是很多开发框架的常用设计,Dubbo中内置了一个轻量版本的IoC容器,用来管理框架内部的插件,实现包括插件实例化、生命周期、依赖关系自动注入…...
P8512 [Ynoi Easy Round 2021] TEST_152 Solution
Description 有一序列 c ( c 1 , c 2 , ⋯ , c m ) c(c_1,c_2,\cdots,c_m) c(c1,c2,⋯,cm) 和 n n n 个三元组 ( l i , r i , v i ) (l_i,r_i,v_i) (li,ri,vi). 回答 q q q 次形如 ( L , R ) (L,R) (L,R) 的询问,具体如下: 将 c c …...
开源项目FastAPI-MCP:一键API转换MCP服务
在当今AI开发的世界中,应用程序与AI模型之间的无缝集成至关重要。 模型上下文协议(Model Context Protocol, MCP)通过允许AI模型访问外部工具和数据源,弥合了这一差距。 FastAPI MCP是一个强大的工具,它可以通过最少的配置将您现有的FastAPI端点转换为MCP兼容的工具。 本…...
8、constexpr if、inline、类模版参数推导、lambda的this捕获---c++17
一、constexpr if:编译时条件分支 作用:在模板编程中,根据条件在编译时选择不同的代码路径,无需特化版本或复杂SFINAE技巧[替代SFINAE]。[SFINAE将在模版元编程再讲。下个月了。]基本语法 if constexpr (condition) {// 如果 co…...
github新建一个远程仓库并添加了README.md,本地git仓库无法push
1.本地git仓库与远程仓库绑定 2.push时报错,本地的 main 分支落后于远程仓库的 main 分支(即远程有更新,但你本地没有),需要拉取远程的仓库--->在merge合并(解决冲突)--->push 3.但是git …...
贝叶斯分类器:原理、算法与应用详解
内容摘要 本文聚焦贝叶斯分类器,介绍其在各类分类器中分类错误概率最小的特性。详细阐述贝叶斯分类器的基本原理、朴素贝叶斯和半朴素贝叶斯分类器的算法,结合西瓜数据集实例说明朴素贝叶斯的应用。此外,还深入探讨极大似然估计和贝叶斯估计…...
算法篇之单调栈
单调栈算法入门 单调栈是一种特殊的数据结构应用,它的核心在于维护一个栈,使得栈内元素保持单调递增或者单调递减的顺序。这种数据结构在解决很多算法问题时非常有效,例如求数组中每个元素的下一个更大元素、每日温度问题等。 一、单调栈的…...
用python + PIL 实现图片格式转换工具
用python PIL 实现图片格式转换工具 要运行该程序,需要使用第三方库PIL(pillow),详情可见https://blog.csdn.net/cnds123/article/details/126141838 格式支持: 支持常见图片格式转换(JPEG, PNG, BMP, GIF…...
【数据库】事务
目录 1. 什么是事务? 2. 事务的ACID特性 3. 为什么使用事务? 4. 如何使用事务 4.1 查看支持事务的存储引擎 4.2 语法 4.3 保存点 4.4 自动/手动提交事务 5. 事物的隔离性和隔离级别 5.1 什么是隔离性 5.2 隔离级别 5.3 查看和设置隔离级别 1…...
C++:详解命名空间
目录 前言 一、命名空间是什么? 1.1命名空间域的定义 二、为什么有命名空间? 三、命名空间的用法 总结 前言 主要讲解命名空间是什么?为什么有命名空间?以及它的用法 一、命名空间是什么? 命名空间域(nam…...
ClickHouse核心架构设计
列式存储原理与数据压缩 列式存储原理 列式存储 vs 行式存储 特性行式存储(如MySQL)列式存储(ClickHouse)数据排列按行连续存储(所有字段相邻)按列连续存储(单列数据紧密排列)适用场…...
K8s-Pod详解
Pod介绍 Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。(程序运行部署在容器中,容器必须存在pod中。pod可以认为是容器的封装,一个pod中可以存在一个或者…...
SSM(SpringMVC+spring+mybatis)整合的步骤以及相关依赖
目录 (一)导入SSM框架相关的依赖 ①创建一个新的web工程(idea2023版) ②思考三者之间的联系,回忆依赖 ③在pom.xml文件中引入依赖坐标 (二)使用注解开发,编写Spring的配置类&am…...
【LeetCode】算法详解#5 ---轮转数组
1.题目介绍 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 1 < nums.length < 105-231 < nums[i] < 231 - 10 < k < 105 2.解决思路 这道题的解决方法有很多,我这里给大家介绍我使用的方法。…...
LeetCode 打家劫舍+删除并获得点数
题目描述 打家劫舍题目传送门1 删除并获得点数传送门2 思路 这两道题看似毫无关系,但竟然可以用桶数组联系起来!! 先说打家劫舍这道题 限制条件是不能走相邻的屋,再联想到跳台阶(走一格或两格)&#x…...
【计量地理学】实验四 主成分分析与莫兰指数
一、实验内容 (一) 某地区35个城市2004年的7项经济统计指标数据见(数据中的“题目1”sheet)。 (1)试用最短距离聚类法对35个城市综合实力进行系统聚类分析,并画出聚类谱系图: 在此次实验内容…...
TDengine 性能监控与调优实战指南(二)
四、TDengine 性能调优实战 4.1 硬件层面优化 硬件是 TDengine 运行的基础,其性能直接影响着 TDengine 的整体表现。在硬件层面进行优化,就如同为高楼大厦打下坚实的地基,能够为 TDengine 的高效运行提供有力支持。 CPU:CPU 作…...
Linux `init 5` 相关命令的完整使用指南
Linux init 5 相关命令的完整使用指南—目录 一、init 系统简介二、init 5 的含义与作用三、不同 Init 系统下的 init 5 行为1. SysVinit(如 CentOS 6、Debian 7)2. systemd(如 CentOS 7、Ubuntu 16.04)3. Upstart(如 …...
uni-app中map的使用
uni-app中map的使用 一、基本使用步骤 1. 引入 map 组件 在 .vue 文件的 template 中直接使用 <map> 标签: <template><view><map :latitude"latitude" :longitude"longitude" :markers"markers" style&quo…...
备战2025年全国信息素养大赛图形化大赛——绘制雪花
以上题目点击下方地址,可查看答案或者在线编程~ 绘制雪花_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/scratch/show-5775.html?_shareid3 程序演示可点击下方地址,支持源码和素材获取,方便高效ÿ…...
1Panel - 基于Web的Linux服务器管理工具
本文翻译整理自:https://github.com/1Panel-dev/1Panel 文章目录 一、关于 1Panel相关链接资源关键功能特性 二、安装系统要求安装脚本 三、基本使用(快速开始)1、快速安装2、访问面板 四、界面展示五、专业版六、安全信息感谢 一、关于 1Pan…...
基于SpringAI Alibaba实现RAG架构的深度解析与实践指南
一、RAG技术概述 1.1 什么是RAG技术 RAG(Retrieval-Augmented Generation)检索增强生成是一种将信息检索技术与生成式AI相结合的创新架构。它通过以下方式实现智能化内容生成: 知识检索阶段:从结构化/非结构化数据源中检索相关…...
SpringBoot Actuator指标收集:Micrometer与Prometheus集成
文章目录 引言一、Spring Boot Actuator基础二、Micrometer简介与集成三、基本指标收集与配置四、自定义业务指标实现五、与Prometheus集成六、实战案例:API性能监控总结 引言 在现代微服务架构中,监控应用程序的健康状况和性能指标变得至关重要。Sprin…...
Spring Boot 集成 Kafka 及实战技巧总结
Spring Boot 集成 Kafka 及实战技巧总结 一、Spring Boot 集成 Kafka 添加依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>配置 Kafka 在 application.yml 中配置生产…...
LeetCode hot 100—分割等和子集
题目 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] 和 [11] 。…...
JUC复习及面试题学习
资源来自沉默王二、小林coding、竹子爱熊猫、代码随想录 一、JUC 1、进程与线程 进程是对运行程序的封装,是系统进行资源调度和分配的最小单位。 线程是进程的子任务,是CPU调度分配的基本单位 不同的进程之间很难数据共享,同进程下的不同线…...
The_Planets_Earth靶场笔记(VulnHub)
环境说明: kali地址:192.168.144.128 靶机地址:192.168.144.181 靶机网卡改为NAT模式。 靶机下载地址: https://download.vulnhub.com/theplanets/Earth.ova 一.信息收集: 1.主机探测: 使用如下命令…...
dawgctf 2025 writeup
dawgctf 2025 writeup 赛事信息pwnJust Parry Lol miscDont Touch My FoneThe BirdsMystery Signal IinternsProjectSuspicious scriptSpectral SecretsCaddyshack forensicsKeeping on ScheduleJust Packets CryptoCipher For Good osintEs ist alles in ButterLook Long and …...
机器学习(神经网络基础篇)——个人理解篇6(概念+代码)———参数优化篇
1 在声明一个类中,构建一个属于类的函数,前面为什要加上“self”? 就像下面这一串代码: class TwoLayerNet:def __init__(self, input_size, hidden_size, output_size,weight_init_std0.01):# 初始化权重self.params {}self.p…...
AI速读:解锁LLM下Game Agent的奇妙世界
在 AI 浪潮中,大语言模型(LLMs)正重塑游戏智能体格局。想知道基于 LLMs 的游戏智能体如何运作,在各类游戏中有何惊艳表现,未来又将走向何方? 大型语言模型(LLMs)的兴起为游戏智能体的…...
个人所得税
文章目录 一、名词解释二、个人所得税计算方法 (举例)1.累计预扣预缴应纳税所得额、本期应预扣预缴税额2.个人所得税预扣率表一3.个人所得税计算举例 三、专项附加扣除政策介绍四、年度汇算清缴政策介绍五、常见问答 一、名词解释 累计预扣法是指扣缴义务人在一个纳税年度内预…...
DEA-Net:基于细节增强卷积和内容引导注意力的单图像去雾
IEEE TIP 2024 | DEA-Net:基于细节增强卷积和内容引导注意力的单图像去雾 DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided attention paper name: DEA-Net: Single image dehazing based on detail-enhanced convolutio…...
StringEscapeUtils:给你的字符串穿上“防弹衣“——转义工具类深度解析
各位代码勇士们好!今天我们要聊的是Apache Commons Lang3中的StringEscapeUtils工具类。如果说StringUtils是瑞士军刀,那StringEscapeUtils就是你的字符串保镖,专门负责在各种危险场合保护你的字符串安全! 一、为什么需要字符串转…...
Sharding-JDBC 系列专题 - 第二篇:广播表(Broadcast Tables)
Sharding-JDBC 系列专题 - 第二篇:广播表(Broadcast Tables) 本系列专题旨在帮助开发者深入掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第二篇文章,将详细讲解 广播表(Broadcast Tables) 的概念、配置、使用场景、工作原理以及实战案例。广播表…...
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRect)
文章目录 一、构造与初始化方法二、坐标与尺寸获取三、坐标与尺寸设置四、几何运算方法五、移动与调整方法六、状态判断方法七、类型转换方法八、操作符重载九、静态方法十、特殊方法附录方法速查表注意的问题交集和并集图解 📘 PySide6.QtCore.QRect 使用整数精度定…...
常见的页面报错
目录 1、 405报错,方法不允许 2、 404报错,未找到资源 404报错的两种可能: 1、前端找不到后端的资源: 2、后端找不到返回的资源: 3、 400报错,错误的请求 后端返回的数据类型与前端不匹配 前端传递的参…...
人机共跑,马拉松人型机器人同跑
马拉松比赛对人形机器人来说,是一场对硬件极限的测试,涉及机械、传感器、能源管理等多个方面。用户问的是硬件方面的考察和改进,这意味着我的回答需要聚焦于硬件性能,而不是算法或软件的优化。 对人形机器人硬件的考研 机械结构与…...
ES6 第一讲 变量定义 堆与栈 字符串的扩展和数值型的扩展
文章目录 1.ES6变量定义2.ES6堆和栈3.字符串的扩展3.1 模板字符串3.2 判断是否以指定的字符串开头或结尾3.3 字符串重复输出3.4 填充方法3.5 去除前后字符串空格3.6 返回参数指定位置的字符 4. 数值型的扩展4.1 二进制0B 八进制0O4.2 判断是否是一个无穷大的数字 (判…...
Linux 动、静态库的实现
前言:当我们写了一段代码实现了一个方法,如果我们不想把方法的实现过程暴露给别人看,可以把代码打包成一个库,其中形成后缀为.a的是静态库,后缀为.so的为动态库;当别人想使用你的方法时,把打包好…...
linux多线(进)程编程——(9)信号量(二)
前言 上一篇文章我们讲解了信号量的基础用法,这一篇文章我们承接上面的内容,给大家进一步提升对信号量的理解。如果没有看过上一篇文章,请大家移步linux多线(进)程编程——(9)信号量(一) 案例…...