当前位置: 首页 > news >正文

Java入门第30课:封装、private、getter/setter

一、学习目标

  1. 理解面向对象三大特性之一:封装的含义与好处
  2. 掌握 private 私有访问修饰符作用
  3. 熟练编写 get、set 方法操作私有成员变量
  4. 在 set 方法中增加数据合法性校验
  5. 分清四种访问修饰符简单区别

二、封装思想

1. 为什么需要封装?

之前代码中成员变量直接暴露,外部可以随意修改:

java运行

Student s = new Student(); s.age = -50; // 年龄负数,数据非法,代码无法拦截

封装核心:隐藏对象内部细节,仅对外提供安全访问入口。 实现思路:

  1. 使用private修饰成员变量,外部无法直接访问
  2. 提供公共 get/set 方法,通过方法读写变量,中间可校验数据

2. 封装三大好处

  1. 安全性:在 set 方法校验数据,过滤非法值
  2. 代码复用:读写逻辑统一放在方法,多处调用不用重复写
  3. 简化调用:使用者不用关心内部实现,只调用提供的方法

三、private 关键字(私有修饰符)

  1. 修饰成员变量、成员方法
  2. 作用范围:仅当前类内部可见,其他类完全无法访问

java运行

public class Student { // 私有变量,外部类不能直接 s.age private String name; private int age; }

测试类直接访问会编译报错:

java运行

public class Test { public static void main(String[] args) { Student s = new Student(); s.age = 18; // 报错:age是private } }

四、getter、setter 标准写法

规则

  1. set 方法:给变量赋值,无返回值,参数和变量类型一致 格式:public void setXxx(类型 参数)
  2. get 方法:获取变量值,无参数,返回值和变量类型一致 格式:public 类型 getXxx()
  3. boolean 类型变量 get 方法推荐用isXxx()

完整学生类示例

java运行

public class Student { // 私有成员变量 private String name; private int age; // name 的 set方法 public void setName(String name) { this.name = name; } // name 的 get方法 public String getName() { return this.name; } // age 的 set方法(增加数据校验) public void setAge(int age) { // 合法年龄 0~120 if (age >= 0 && age <= 120) { this.age = age; } else { System.out.println("年龄输入不合法,赋值失败"); this.age = 0; } } // age 的 get方法 public int getAge() { return this.age; } // 展示信息方法 public void show() { System.out.println("姓名:" + name + ",年龄:" + age); } }

测试类使用

java运行

public class TestStudent { public static void main(String[] args) { Student s = new Student(); // 设置值 s.setName("小明"); s.setAge(20); // 获取值 System.out.println(s.getName()); System.out.println(s.getAge()); s.show(); // 传入非法年龄 s.setAge(-10); System.out.println(s.getAge()); } }

运行结果:

plaintext

小明 20 姓名:小明,年龄:20 年龄输入不合法,赋值失败 0

五、带构造方法 + 封装综合案例

java运行

public class Person { private String name; private int age; // 无参构造 public Person(){} // 有参构造 public Person(String name, int age) { this.name = name; // 构造中赋值也调用set,复用校验逻辑 setAge(age); } // get set public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { if(age >= 0 && age <=150){ this.age = age; }else{ System.out.println("年龄非法"); } } public int getAge() { return age; } public void info(){ System.out.println(name + "," + age + "岁"); } }

六、四种访问修饰符简单认知(本课拓展)

表格

修饰符本类同包子类任意类
private
默认 (不写)
protected
public

本课重点只用privatepublic

七、常见易错点

  1. 私有变量直接用对象。变量访问 → 编译报错,必须走 get/set
  2. set 方法忘记做数据校验,失去封装安全意义
  3. get/set 方法大小写错误:变量 age → setAge,不是 setage
  4. boolean 类型变量:private boolean sex; 推荐isSex()而非 getSex ()

八、课堂练习

  1. 定义手机类 Phone,私有属性 brand 品牌、price 价格
  2. 编写 get、set 方法,价格不能小于 0,小于 0 则提示价格非法
  3. 创建对象,通过 set 赋值,get 打印信息

九、课后作业

  1. 定义 Dog 类,私有 name 名字、int age、boolean isPet 宠物
  2. 完善全套 get/set,age 限制 0~20
  3. 写有参构造,调用 set 方法赋值,编写 show 方法输出全部属性

本课总结

  1. 封装:隐藏内部数据,对外提供统一访问接口;
  2. private 修饰变量,外部无法直接访问;
  3. setXxx 赋值,可校验数据;getXxx 获取值;
  4. 封装核心价值:保护数据安全、统一控制逻辑
http://www.gsyq.cn/news/1580942.html

相关文章:

  • CVE-2021-41773 Apache HTTP Server 路径穿越与远程命令执行漏洞
  • 如何快速掌握图表工具:Mermaid Live Editor新手友好的完整教程
  • 鸿蒙 ArkTS 核心知识点完整详解(考试版)
  • 写了很多内容后,我还是决定给自己搭一个Typecho博客
  • 基于XC7A100T-1FGG484I的高性能信号处理与数据采集系统设计
  • 2026年国内用户开通 ChatGPT Plus,真正要注意的不是付款,而是这几件事
  • 温湿度智能测控系统:多渠道消息推送,异常快速响应
  • 外卖小程序搭建需要什么资质?企业上线指南
  • 移动最小二乘法(MLS)拟合平面正弦曲线(MATLAB 实现)
  • 如何挑选靠谱的共享充电宝
  • Centos6换源
  • 2. 石油地球物理测井
  • 大数据偏远院校大数据专业,报考性价比怎么判断
  • 当Windows域客户端寻找LDAP时,Responder如何成为“完美替身“捕获认证凭据
  • Vue2 + ElementUI 批量更新排序/产品分类完整实现
  • windows系统安装Python + Pycharm教程【新手简洁版】
  • 高质量C++/ C编程指南-文件结构
  • 【AI原生思维链工程化白皮书】:2026奇点大会首发CoT落地框架、5大工业级验证范式与3类失效熔断机制
  • 连接第二台手机提示:cannot connect to 192.168.1.130:5555: 由于目标计算机积极拒绝,无法连接。 (10061)
  • 我用手工写标书和AI辅助各做了一周,整理出这份真实对比
  • Java数组深度解析:从基础到架构的实战指南(上)
  • OmniShotCut实战:C++/ONNX部署SOTA镜头检测,一键导出PR时间线(附开源JSX脚本)
  • 自己买共享充电宝到底划不划算
  • 欧盟GMP对AI大模型划定红线,详解药企AI生存法则
  • 高考志愿填报:大数据相关专业到底怎么选?
  • 2026年全铝大门选购指南:哪家工艺更靠谱
  • 用SymPy自动计算抛物线求根、判别式与顶点
  • 一行代码看懂 Linux 内核的时间转换:__month_to_secs 逐行拆解
  • 2026金九银十Java八股文面试题汇总(附答案·全栈覆盖)
  • 多色流式无串扰!647细胞凋亡检测试剂盒