news 2026/6/23 19:57:30

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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. 封装核心价值:保护数据安全、统一控制逻辑
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 19:51:49

如何让老旧Mac重获新生:OpenCore Legacy Patcher完整实战指南

如何让老旧Mac重获新生&#xff1a;OpenCore Legacy Patcher完整实战指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 如果你还在为2011-2012年的MacBook …

作者头像 李华
网站建设 2026/6/23 19:49:08

德思特干货 | 卫星导航增强技术全景解析与高精度仿真验证

目录 行业演进趋势 一、核心原理 GNSS基本定位架构 限制精度的三大核心误差源 二、三大主流增强技术路线全景解析 1、天基增强系统&#xff08;SBAS&#xff09; 2、地基增强系统&#xff08;GBAS/CORS&#xff09; 3、辅助全球导航卫星系统&#xff08;A-GNSS&#xff…

作者头像 李华
网站建设 2026/6/23 19:49:07

如何挑选靠谱的共享充电宝

1. 共享充电宝的“坑”&#xff0c;你踩过几个&#xff1f;手机电量告急时&#xff0c;共享充电宝成了“救命稻草”&#xff0c;但选错产品可能让你陷入充电慢、借还难、安全隐患多等困境。比如&#xff0c;部分充电宝标注“快充”却需数小时才能充满&#xff0c;紧急时刻根本不…

作者头像 李华
网站建设 2026/6/23 19:47:42

librime-lua:用Lua脚本为RIME输入法注入无限可能

librime-lua&#xff1a;用Lua脚本为RIME输入法注入无限可能 【免费下载链接】librime-lua Extending RIME with Lua scripts 项目地址: https://gitcode.com/gh_mirrors/li/librime-lua 核心关键词&#xff1a;RIME输入法扩展、Lua脚本编程、自定义输入法引擎 长尾关键…

作者头像 李华