java学习笔记6

11. 类的封装

​ 在Java中,**封装(Encapsulation)**是面向对象编程中的重要概念,它指的是将类的数据(属性)和行为(方法)绑定在一起,并对外部隐藏数据的具体实现细节,只通过公共方法来访问和操作数据。这有助于提高代码的安全性、可维护性和灵活性。

11.1 为什要封装

​ java编程思想中,封装被认为是一种保护屏障,防止本类代码和数据被外部程序随机访问,从而造成数据不安全。

public class Student {public String name;public int age;public void read() {System.out.println("我是" + name + ",今年" + age);}
}public class StudentTest {public static void main(String[] args) {Student stu = new Student();stu.name = "tom";stu.age = -18;stu.read(); // 我是tom,今年-18}
}

​ 在上面的程序中,输出信息是: ”我是tom,今年-18“。 虽然程序编译执行没有任何问题,但是在现实生活中,age值是负数,显然不符合逻辑。为了避免这种错误,设计类时,应该对成员属性进行限定,不允许外界随意访问,这就需要实现类的封装。

11.2 如何实现封装

​ java中类的封装步骤主要有以下几步:

​ 1. 私有化类属性,不允许外部进行访问和操作。

​ 2. 提供公共的setter 和 getter 方法,便于对属性进行赋值和获取。

​ 3. 在方法内部对属性的赋值过程进行判断是否合法。

public class Student {// 1. 私有化属性private String name;private int age;// 2. 提供公共的setter 和 getter方法,用于操作属性public void setAge(int age) {// 3. 判断赋值给属性的参数是否合法if (age <= 0) {System.out.println("学生的年龄是大于0的整数!");this.age = 18; // 可以设置一个默认值} else {this.age = age;}}public int getAge() {return this.age;}public void setName(String name) {this.name = name;}public String getName() {return this.name;}public void read() {System.out.println("我是" + this.name + ",今年" + this.age);}
}public class StudentTest {public static void main(String[] args) {Student student = new Student();// 1. 通过setter方法设置对象的属性值student.setAge(-18); // 学生的年龄是大于0的整数!student.setName("tom");student.read(); // 我是tom,今年18// 2. 使用getter方法获取对象的属性值String name = student.getName();System.out.println("name=" + name);}
}

11.3 封装的好处

​ Java中的封装提供了一些好处,有助于更好的代码组织、安全性和可维护性。以下是封装的主要优点:

11.3.1 数据隐藏
  • 封装对外部世界隐藏了对象的内部状态,允许通过方法进行受控访问。
  • 通过将数据设为私有并提供公共方法(getter和setter),可以保持数据的完整性。
11.3.2 提高安全性
  • 通过封装,关键数据只能通过定义的方法隐藏和访问。
  • 防止未经授权的访问或操作数据,增强安全性。
11.3.3 增强可重用性
  • 封装通过分离关注点和促进结构的清晰,使代码更干净、更易读。
  • 封装的类在应用程序的不同部分更容易理解和重用。

11.4 访问控制

​ 针对类、成员方法和属性,java提供了4中访问控制权限,分别是private、default、protected、public。下面的图是这4种访问权限按级别由小到大依次列出:

通过一张表可以比较各种访问权限的区别:

访问范围privatedefaultprotectedpublic
同类中
同包中
不同包子类
全局范围
package cn.bdqn;public class Person {private String name;// private 权限public int age;//public 权限protected String gender;// protected 权限String color; // default 权限public Person(String name, int age, String gender, String color) {this.name = name;this.age = age;this.gender = gender;this.color = color;}private void displayDetails() {System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("Gender: " + gender);}public void introduce() {System.out.println("Hello, my name is " + name + ".");}protected void displayGender() {System.out.println("Gender: " + gender);}<

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

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

相关文章

Python exe 文件反编译为 Python 脚本

文章目录 前言版本反编译Python 可执行文件&#xff08;.exe&#xff09;反编译打包一个简单的 .exe 可执行文件提取 pyc 文件使用脚本提取使用工具提取 将 .pyc 文件转换为 Python 脚本入口运行类非入口运行类转换补全后的 pyc 文件uncompyle6 反编译在线工具 可能遇到的问题P…

Golang context 原理分析

1. 说在前面2. 场景分析 2.1 链式传递2.2 主动取消2.3 任务超时2.4 数据存储 3. 源码解读 3.1 一个核心数据结构 3.1.1 Context 3.2 四种具体实现 3.2.1 emptyCtx3.2.2 cancelCtx3.2.3 timerCtx3.2.4 valueCtx 3.3 六个核心方法 3.3.1 Background() && TODO()3.3.2 Wit…

如何在在wordpress安装百度统计

前言 看过我的往期文章的都知道&#xff0c;我又建了一个网站&#xff0c;这次是来真的了。于是&#xff0c;最近在查阅资料时发现&#xff0c;有一款免费的软件可以帮我吗分析网站数据。&#xff08;虽然我的破烂网站压根没人访问&#xff0c;但是能装上的都得上&#xff0c;…

探索边缘计算:技术的新疆界

探索边缘计算&#xff1a;技术的新疆界 在当今迅速发展的数字化时代&#xff0c;云计算作为数据处理的主力军已广泛应用。但是&#xff0c;随着物联网&#xff08;IoT&#xff09;设备的急剧增加和数据生成速率的加快&#xff0c;云计算面临着种种挑战。边缘计算因此诞生&…

什么是Dubbo及其主要作用

在微服务架构日益盛行的今天&#xff0c;RPC&#xff08;远程过程调用&#xff09;技术成为了实现服务间通信的关键手段。而Dubbo&#xff0c;作为一款高性能、轻量级的开源Java RPC框架&#xff0c;受到了广大开发者的青睐。那么&#xff0c;Dubbo究竟是什么呢&#xff1f;它的…

STL-list的使用及其模拟实现

在C标准库中&#xff0c;list 是一个双向链表容器&#xff0c;用于存储一系列元素。与 vector 和 deque 等容器不同&#xff0c;list 使用带头双向循环链表的数据结构来组织元素&#xff0c;因此list插入删除的效率非常高。 list的使用 list的构造函数 list迭代器 list的成员函…

深度神经网络(DNN)

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个深度神经网络&#xff08;DNN&#xff09;模型程序,最后打印5个条件分别的影响力。 示例 在深度神经网络&#xf…

动态规划相关

动态规划相关 力扣509 斐波那契数列 完全递归解法 / 设置备忘录减少递归次数解法 都是 自顶向下力扣 509 斐波那契数列 动态规划 自底向上 力扣509 斐波那契数列 完全递归解法 / 设置备忘录减少递归次数解法 都是 自顶向下 public int fib(int n) {/** if(n<2){* return n;…

Matlab新手快速上手2(粒子群算法)

本文根据一个较为简单的粒子群算法框架详细分析粒子群算法的实现过程&#xff0c;对matlab新手友好&#xff0c;源码在文末给出。 粒子群算法简介 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;是一种群体智能优化算法&#xff0c;灵感来源于…

【测试总结】测试时如何定位一个bug?是前端还是后端?

作为一道面试题&#xff0c;它算高频了么&#xff1f;我面试别人问多挺多次&#xff0c;我也被面试官问过... 相对来说多少能看出一点测试经验&#xff0c;实际测试中的排查问题能力... 1、前后端bug有各自的一些特点&#xff1a; 前端bug特性&#xff1a;界面相关&#xff0c…

计算机网络(第7版谢希仁)笔记

计算机网络 第一章 概述第二章 物理层第三章、数据链路层第四章 网络层第五章 运输层第六章、应用层第七章 网络安全 第一章 概述 1、三大类网络&#xff1a;电信网络、有线电视网络、计算机网络。 电信网络&#xff1a;提供电话、电报及传真服务。 有线电视网络&#xff1a;向…

目标检测YOLO数据集的三种格式及转换

目标检测YOLO数据集的三种格式 在目标检测领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;算法是一个流行的选择。为了训练和测试YOLO模型&#xff0c;需要将数据集格式化为YOLO可以识别的格式。以下是三种常见的YOLO数据集格式及其特点和转换方法。 1. YOL…

计算机系统结构(二) (万字长文建议收藏)

计算机系统结构 (二) 本文首发于个人博客网站&#xff1a;http://www.blog.lekshome.top/由于CSDN并不是本人主要的内容输出平台&#xff0c;所以大多数博客直接由md文档导入且缺少审查和维护&#xff0c;如果存在图片或其他格式错误可以前往上述网站进行查看CSDN留言不一定能够…

大话设计模式-里氏代换原则

里氏代换原则&#xff08;Liskov Substitution Principle&#xff0c;LSP&#xff09; 概念 里氏代换原则是面向对象设计的基本原则之一&#xff0c;由美国计算机科学家芭芭拉利斯科夫&#xff08;Barbara Liskov&#xff09;提出。这个原则定义了子类型之间的关系&#xff0…

【设计模式】7、decorate 装饰模式

文章目录 七、decorate 装饰模式7.1 饮料&#xff1a;类型配料7.1.1 drink_with_ingredient_test.go7.1.2 drink_with_ingredient.go7.1.3 drink.go 7.2 notifier7.2.1 notifier_decorator_test7.2.2 notifier_decorator7.2.3 notifier 7.3 idraw7.3.1 idraw_test7.3.2 idraw7.…

【人工智能基础】经典逻辑与归结原理

本章节的大部分内容与离散数学的命题、谓词两章重合。 假言推理的合式公式形式 R,R→P⇒PR,R∨P⇒P 链式推理 R→P,P→Q⇒R→QR∨P,P∨Q⇒R∨Q 互补文字&#xff1a;P和P 亲本子句&#xff1a;含有互补文字的子句 R∨P,P∨Q为亲本子句 注意&#xff1a; 必须化成析取范式…

命理八字之电子木鱼的代码实现

#uniapp# #电子木鱼# 不讲废话&#xff0c;上截图 目录结构如下图 功能描述&#xff1a; 点击一下&#xff0c;敲一下&#xff0c;伴随敲击声&#xff0c;可自动点击。自动点击需看视频广告&#xff0c;或者升级VIP会员。 疑点解答&#xff1a; 即animation动画的时候&…

Window中Jenkins部署asp/net core web主要配置

代码如下 D: cd D:\tempjenkins\src\ --git工作目录 dotnet restore -s "https://nuget.cdn.azure.cn/v3/index.json" --nuget dotnet build dotnet publish -c release -o %publishPath% --发布路径

装饰器学习

【一】什么是装饰器 装饰器指的就是为被装饰的对象添加新的功能 器 代表工具 增加后的调用方式不变 在不改变源代码和调用方式的基础上增加额外的新功能 【二】装饰器的用途 对上线后的程序进行新功能的增加和修改 给一个功能增加新的需求或者改变原来的程序运行逻辑 【…

Day08React——第八天

useEffect 概念&#xff1a;useEffect 是一个 React Hook 函数&#xff0c;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAx请求&#xff0c;更改daom等等 需求&#xff1a;在组件渲染完毕后&#xff0c;立刻从服务器获取频道列表数据…