
【java基础知识(学习笔记)】--三大特点之一(封装)
发布日期:2021-05-09 15:05:44
浏览次数:20
分类:精选文章
本文共 1851 字,大约阅读时间需要 6 分钟。
封装概述
封装是面向对象编程中的一个重要概念之一。面向对象编程的三大特征包括封装、继承和多态。封装的核心思想是将代码分割成独立的单元,每个单元只关注自己的内部逻辑,而与其他单元无关。
封装的表现
方法是基本封装单位
方法将一堆操作封装在一起,用户只需要调用方法就可以完成整个操作,而不需要关心方法内部是如何实现的。这提高了代码的复用性和模块性。类也是一个封装体
类将数据和方法结合在一起,形成一个完整的单元。用户可以通过创建对象来使用类中的数据和方法,从而隐藏了实现细节,提高了代码的安全性和复用性。封装的好处
提高代码复用性
유지懈封装的代码可以在其他地方复用,减少了重复代码的编写,提高了开发效率。遮盖实现细节
对外提供简单的接口或方法,隐藏了实际的实现方式,使得程序更安全且不容易被篡改。提高安全性
通过私有化的成员变量和方法,防止了不经过授权的随意访问,保护了程序的安全。封装举例
机箱是一个很好的例子。一个机箱里装满了各种部件,如果不通过特定的插接口,外部设备无法随便插入或移除,这就是封装的思想。机箱提供了一定的访问方式(插口和开关),但细节被隐藏起来了。
私有(private)
在Java中,私有变量可以用来保护类的内部逻辑,防止外部类随便修改。比如,以下Person类:
class Person { private int age; private String name; public void setAge(int age) { this.age = age; } public int getAge() { return age; }}
虽然外部类无法直接访问age和name,但可以通过setAge和getAge方法进行操作。这样既保持了封装的好处,又提供了合理的访问方式。
this关键字
成员变量与局部变量冲突问题
在方法中,如果成员变量和局部变量名称相同,可以通过this关键字来区别它们:
class Person { private int age; private String name; public void speak() { this.name = "小强"; this.age = 18; System.out.println("name=" + this.name + ",age=" + this.age); }}
对象内存解释
在内存中,对象由栈内存和堆内存组成。Stack Memory存储方法调用信息,Heap Memory存储对象实例。当创建一个Person对象时,堆内存为它分配空间,成员变量初始化为0。通过this关键字可以访问当前对象的成员变量和方法。
this的应用
在封装中,this可以用来表示当前对象。例如:
public boolean equalsAge(Person p) { return this.age == p.age;}
在此处,this表示当前调用方法的对象。
练习:判断是否为同龄人
编写一个Person类,并添加一个判断是否为同龄人的方法:
class Person { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public boolean equalsAge(Person p) { return this.age == p.age; } public void speak() { System.out.println("姓名:" + name + ",年龄:" + age); }}
通过这种方式,读者可以理解如何在封装中使用私有成员变量和this关键字,以及如何构建对象之间的关系。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月29日 02时39分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HustOJ二次开发之修改数据库连接池
2019-03-06
SpringBoot之整合Dubbo
2019-03-06
Drools之关键字及错误信息
2019-03-06
嘿!为你的应用创建滚动日志吧?
2019-03-06
一个JAVA应用启动缓慢问题排查 --来自jdk securerandom 的问候
2019-03-06
报警系统:php输出头信息以方便脚本抓取信息[排查篇]
2019-03-06
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2019-03-06
httprunner学习23-加解密
2019-03-06
jenkins学习6-进docker容器修改jenkins时间
2019-03-06
jenkins学习13-凭据管理(删除多余的凭据)
2019-03-06
python接口自动化8-参数化
2019-03-06
使用GMap.NET类库,实现地图轨迹回放。(WPF版)
2019-03-06
有道云笔记 同步到我的博客园
2019-03-06
阿里云“网红"运维工程师白金:做一个平凡的圆梦人
2019-03-06
AnalyticDB for PostgreSQL 6.0 新特性介绍
2019-03-06
Alibaba Cloud Linux 2 LTS 正式发布,提供更高性能和更多保障!
2019-03-06
李笑来必读书籍整理
2019-03-06
vue书籍整理
2019-03-06