网站首页 > java教程 正文
“这里是云端源想IT,帮你轻松学IT”
嗨~ 今天的你过得还好吗?
人不需要活太多样子
你认真做一件事
会解释所有的事
- 2023.08.25 -
封装是面向对象编程(Object-Oriented Programming,简称OOP)中的一个重要概念,它是一种将数据和对数据的操作(方法)组合在一起的机制,从而实现数据的保护和安全。在Java中,封装通过访问修饰符来实现,主要有公有(public)、私有(private)和受保护(protected)三种。
封装不仅能够提高代码的可维护性和可读性,还能够实现代码的重用性。通过将数据和对数据的操作封装在一起,可以防止外部代码直接访问和修改数据,从而保证数据的安全性。还可以实现不同对象之间的隔离和解耦,提高代码的可复用性。下面就带大家来了解一下封装的概念和使用。
一、封装的概念
生活案例:生活中的封装比如ATM收款机,会使用一个机器来保证钱的正常流动,给你一个特定的方法来存钱取钱,不会说让你随意的取钱存钱。
在Java中,封装也是这个概念,封装就是把过程和数据包裹起来,对数据的访问只能通过已经定义的接口,面向对象计算始于这个基本概念,即现实世界已经被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
Java中封装的理解:
我们在程序设计的时候就追求“高内聚、低耦合”:
- 高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
- 低耦合:仅对外部暴露少量的方法用于使用。
隐藏对象内部的复杂性、只对外公开简单的接口。便于外界调用从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装的设计思想。在Java中通过权限修饰符关键字公有(public)、私有(private)和受保护(protected)实现封装。
封装的作用:
封装的作用在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。
二、封装的使用
作用:提高代码的安全性。
通过一个属性感受封装:
public class A{
int age;
}
public static void main(String[] args){
A a = new A();
a.age = 500;
}
在这里设置一个A类,有一个年龄属性,但是在主函数里面给年龄设置值的时候,可以胡乱的设置一个值,几百几千的违背常理的设置都不会报错,这个时候就可以使用封装了。
public class A{
private int age;
//提供一个返回年龄的方法
public int getAge(){
return age;
}
//提供一个处理年龄误差的方法
public void setAge(int age){
if(age<80){
age=18;
}else{
this.age = age;
}
}
}
public static void main(String[] args){
A a = new A;
a.getAge(81);
system.uot.println(a.setAge);
上面的代码,对于age属性来说,我加了private。这样外界对它的访问就受到了限制,现在我还想加上其他的限制条件,但是在属性本身上没有办法再加了,所以我们通过定义方法来进行条件的添加。
以属性为案例,进行封装:
1、将属性私有化,被private修饰,加入权限修饰符;
2、提供public修饰的方法让别人来访问使用;
3、即使外界可以通过方法来访问属性了,但是也不能随意访问,因为可以在方法中加入限制条件;
4、设置getter、setter方法,给别人提供访问的路径,idea快捷键:alt+insert键快速生成。
什么情况下封装?
编写实例类时,用到封装有很多好处,其中比较实际的是:
- 拒绝直接调用声明字段,保护内部数据,更安全;
- 在编程中可达到缓存的效果,执行效率高;
- 重复调用,避免代码冗余,程序编写效率高。
三、相关概念介绍
1、private关键字
private,含义:私有的;
权限修饰符:规定了被修饰的代码在哪里能被访问,在哪里不能被访问。
可以修饰的内容:
- 修饰成员变量
- 修饰成员方法
- 修饰构造方法
- 修饰内部类
修饰之后的效果只能在本类中进行访问,本类之外无法访问。
private关键字注意 private只是封装思想的一种体现形式,封装还可以使用其他修饰符来完成。
2、Get和Set
当成员变量私有化之后,外界无法访问,所以需要对外界提供一个公开的访问方式,来获取成员变量值和设置成员变量的值。
访问:通过方法来实现。
- 方法外界可以访问;
- 方法和成员变量同属于一个类型,方法能访问自己类型中的私有成员变量;
- 外界访问方法,方法访问私有成员变量,从而达成间接访问。
一般情况下,都是set进行赋值,get进行获取值。
一般情况下,书写类的属性都要用private修饰,个别情况根据需求来修改,并且一般情况下每一个成员变量都有一套set、get方法。
3、this关键字
变量的访问原则是:就近原则。
- 作用:表示当前类型当前对象的引用。
- 哪个对象来调用this关键字所在的方法,this就指代哪个对象。
- 在set方法中,this该关键字在见名知意的前提下,用于区分哪个是对象的成员变量,剩下的一个按照就近原则,就是局部变量。所以在set方法中,使用【this.成员变量的变量名】,一定是成员变量, 没有使用name的变量,就按照就近原则去寻找。
4、构造方法
概述:又叫做构造器或者构造函数,Constructor。
作用:用于给成员变量赋值!在创建对象的过程中,会自动调用构造方法,等对象创建完毕的时候,对象中的成员变量就已经通过构造方法赋值成功了。
定义格式:修饰符 方法名称(参数列表) { 方法体; }
定义说明:
- 构造方法没有返回值,连void也没有;
- 方法名称:和所在类型保持一致;
- 构造方法可以有return语句,但是没有什么必要,只是表示方法结束。
其它说明
- 构造方法不能手动调用,在创建对象的时候由JVM自动调用;
- 因为一个对象只能被创建一次,所以构造方法针对同一个对象,只能被调用一次;
- 构造方法可以重载;
- 当一个类没有手动提供任何构造方法时,在编译时系统会自动为我们添加一个空参构造。
- 当我们手动添加了一个任何构造的时候,系统就不会在为我们添加任何构造方法
- 如果构造方法没有修饰符,也是构造方法,只不过是默认权限而已,方法中的内容无关紧要。
构造和set区别
- 构造方法可以为多个成员变量赋值,set只能对一个进行赋值;
- 构造方法由JVM自动调用,set需要手动调用;
- 构造方法针对同一个对象只能调用一次,set方法针对同一个对象可以调用多次;
- 构造方法用于给变量赋值,set可以给变量赋值或者修改值;
- 构造可以使代码更加简洁,set方法灵活性更高。
6、初始化顺序
创建对象的时候,成员变量经历了三个过程:
1)默认初始化
2)构造方法初始化
3)显示初始化
三者优先级顺序:构造初始化 < 显示初始化 < 默认初始化。
这部分就先介绍这么多啦,等你更加深入学习之后就会了解到更多。
封装是Java中一个非常重要的概念,它能够提高代码的可维护性、可读性和安全性,实现代码的重用性和解耦。在编写Java代码时,我们应该充分利用封装的机制,将数据和对数据的操作封装在一起,从而编写出高质量的代码。
我们下期再见!
END
文案编辑|云端学长
文案配图|云端学长
内容由:云端源想分享
猜你喜欢
- 2024-11-13 Java面向对象三大特征:封装、继承、多态
- 2024-11-13 利用Java注解的简单封装,进行的一次优化
- 2024-11-13 如何封装原生的 Java NIO 以及扩展?详细到让你分分钟搞定Netty
- 2024-11-13 Java面向对象——基础2 封装、继承、多态
- 2024-11-13 想要 Spring Data JPA/MongoDB 更易用,你应该这样封装
- 2024-11-13 Java面向对象高级特性-封装(java面向对象三大特点)
- 2024-11-13 Java基础类型与封装类型的区别与联系
- 2024-11-13 java包装类的自动封装、自动拆箱和缓存
- 2024-11-13 java程序员必备的基础知识_java面向对象之封装(二)
- 2024-11-13 Java面试基础回顾03-封装(java基础面试题及答案)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)