当前位置: 首页 > 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.jsqmd.com/news/1068988/

相关文章:

  • CVE-2021-41773 Apache HTTP Server 路径穿越与远程命令执行漏洞
  • 如何快速掌握图表工具:Mermaid Live Editor新手友好的完整教程
  • 3步终极修复方案:彻底解决macOS升级后Mac Mouse Fix侧键失效问题
  • 鸿蒙 ArkTS 核心知识点完整详解(考试版)
  • 加拿大亚马逊双板滑雪用头盔和单板滑雪用头盔CSA Z263.1标准
  • 鸿蒙布局和组件
  • 写了很多内容后,我还是决定给自己搭一个Typecho博客
  • LoRa 无线对讲机-显示1-启动界面
  • 离谱!一根坏内存,连累三根好内存不开机?90%人不懂的电脑硬件冷知识
  • 2026年国内用户开通 ChatGPT Plus,真正要注意的不是付款,而是这几件事
  • 盘锦门窗别只看价格
  • 基于XC7A100T-1FGG484I的高性能信号处理与数据采集系统设计
  • 温湿度智能测控系统:多渠道消息推送,异常快速响应
  • 外卖小程序搭建需要什么资质?企业上线指南
  • 017、list 从入门到精通(三):sort 与 sorted 的 Timsort 算法原理
  • 2026年语音转文字软件对比 日常办公场景大横评,差距竟然这么大
  • 突破性AI翻译实战:用宝玉Prompt实现专业级英译中效果
  • 如何运营好小红书店铺?
  • AI 大模型就业:真实开发里的落地路径
  • 以太网之 L2-LLR 介绍
  • 2026年全铝大门选购指南:这三点决定品质高低
  • 潮汛网都涵盖哪些内容?
  • 民间核查倒逼行业变革:科研合规不能只靠事后举报,前置自检才是保护学者的底线
  • 德思特干货 | 卫星导航增强技术全景解析与高精度仿真验证
  • 终于找到做零添加老酸奶代工的源头厂!配方超干净
  • 移动最小二乘法(MLS)拟合平面正弦曲线(MATLAB 实现)
  • 收藏!小白程序员必看:AI应用黄金三年,这5个岗位让你轻松入局!
  • 如何挑选靠谱的共享充电宝
  • 写完 OpsPilot CLI 后,我对命令行工具的几个判断
  • 鸿蒙闪控球功能评测:盯盘抢单搜题记账等一步直达