一、什么是封装

  菜鸟教程对封装的解释是“在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。”。简单来说就是对公用的java代码装到一个盒子中。当需要使用这部分代码的是时候,通过调用这个打包好的盒子就可以对这个功能进行实现。

二、为什么要进行封装

  1. 减少耦合。程序设计要追求“低耦合,高内聚”。 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。封装就满足了低耦合的需求。
  2. 隐藏信息,提高可靠性。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
  3. 提高代码的复用性。相同的功能代码不需要第二次书写,直接调用就可以,极大的提高了代码的复用性,降低了代码量。
  4. 方便修改和实现。当需要对其某部分进行修改时,做到一改全改。

三、封装的实现(属性私有,get/set)

  Student.java,是一个学生类。有私有属性,这些属性只有在本类里面才有效。在Student类里面针对各个属性有get和set方法,这些方法是共有属性,当产生一个Student对象时,就可以通过这些共有属性来访问这些私有变量。这就是这个类提供对外的接口。

public class Person {
private String name;
private int age;
private int id;
private char sex; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public char getSex() {
return sex;
} public void setSex(char sex) {
this.sex = sex;
}
}

  Application.java通过创建一个对象来使用Student类中的私有属性:

public class Application {
public static void main(String[] args) {
Person person=new Person();

System.out.println(person.getName());
person.setName("ThreePure");
System.out.println(person.getName());

person.setAge(21);
System.out.println(person.getAge());

person.setId(512);
System.out.println(person.getId());

person.setSex('男');
System.out.println(person.getSex());
}
}

  输出结果为:

null
ThreePure
21
512

  由运算结果可知,当变量被定义而没有被初始化时,是会有一个默认值的。

  封装还一个好处就是可以提高代码的安全性,这里年龄可以随意输入,但是现实生活中,年龄的范围是0-120岁,这就需要使用封装对年龄进行限制。当输入非法的数据时能够自行判断。对setAge方法进行修改。

 public void setAge(int age) {
if (age>120 || age<0){
System.out.println("输入的年龄非法");
}else {
this.age = age;
}
}
person.setAge(121);
System.out.println(person.getAge());

 运算结果:

输入的年龄非法
0 //使用默认值输出。

   以上实例中public方法是外部类访问该类成员变量的入口。因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

四、IDEA快速创建get/set方法。

  在需要创建get/set方法处按Alt+insert组合键打开Generate菜单,选择Getter and Setter。
  

在弹出来的菜单中选中要创建get/set方法的变量:

  

到此,get/set方法的创建就完成了。

java面向对象思想之封装的更多相关文章

  1. 06-03 Java 面向对象思想概述、开发设计特征,类和对象的定义使用,对象内存图

    面向对象思想概述.开发设计特征 1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一 ...

  2. JAVA面向对象思想理解分析

    1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...

  3. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  4. Java面向对象编程:封装,继承,多态

    Java面向对象的三大特征: 封装:通过Java的类来实现数据和操作方法的封装,对外界可以将每一个Java类都视为一个黑箱,只需调用该黑箱提供的方法即可完成你想要的操作. 继承:通过类的继承,将统一的 ...

  5. 薪资管理系统(Java面向对象思想)

    package com.test3; import java.util.*; import java.io.*; /** * @author qingfeng * 重要思想:面向对象思想(添加员工管理 ...

  6. java面向对象思想2

    1.主函数是一类特殊的函数,作为程序入口,可被虚拟机调用.主函数格式是固定的.public:函数访问权限最大.static:代表函数随着类的加载已经存在.void:主函数没有具体返回值.main:不是 ...

  7. java面向对象思想1

    1.面向对象是面向过程而言.两者都是一种思想.面向过程:强调的是功能行为.(强调过程.动作)面向对象:将功能封装进对象,强调了具备了功能的对象.(强调对象.事物)面向对象是基于面向过程的.将复杂的事情 ...

  8. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  9. Java面向对象思想解决猜拳问题

    第一个面向对象的程序: 一个控制台猜拳小游戏: 第一步选择角色: 第二部选择剪刀,石头,布,与电脑进行PK: 第三部选择继续或者选择结束; 结束显示比赛的局数,以及各自赢得的分数: 设计思路 分析问题 ...

随机推荐

  1. MyBatis功能点二:从责任链设计模式的角度理解插件实现技术

    MyBatis允许对其四大组件(Executor,StatementHandler,ParameterHandler, ResultSetHandler)进行增强处理.在创建四大组件对象的时候 1.每 ...

  2. No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK 问题解决

    1. 问题描述 使用idea对Java工程执行mvn compile命令进行编译,出现以下报错: [ERROR] Failed to execute goal org.apache.maven.plu ...

  3. python中特殊参数self的作用

    特殊参数self的作用:self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行. self代表的是类的实例本身,方便数据的流转.对此,我们需要记住两点: 第一点: ...

  4. 生成式AI会成为是人工智能的未来吗

    生成式 AI 是一项创新技术,可帮助算法人员生成以前依赖于业务员的模型,提供创造性的结果,而不会因业务员思想和经验而产生任何差错. 人工智能中的这项新技术确定了输入的原始模型,以生成演示训练数据特征. ...

  5. springMVC整合mybatis,spring

    使用spring-mvc创建一个项目的过程 spring的配置十分复杂,很难记忆. 这篇博客用于记录springmvc整合创建过程,虽然步骤有点多,但是每一步都很容易理解,便于以后忘记后参考和记忆. ...

  6. 【C# TAP 异步编程】四、SynchronizationContext 同步上下文|ExecutionContext

    一.同步上下文(SynchronizationContext)概述 由来 多线程程序在.net框架出现之前就已经存在了.这些程序通常需要一个线程将一个工作单元传递给另一个线程.Windows程序以消息 ...

  7. 深度剖析数仓CN增量备份技术

    摘要:为了解决Roach的性能问题,提出了CN增量备份手段,从而达到进一步优化RPO目的. 本文分享自华为云社区<GaussDB(DWS)备份容灾之CN增量备份>,作者: zxy_db . ...

  8. Go基础知识梳理(四)

    Go基础知识梳理(四) GO的哲学是"不要通过共享内存来通信,而是通过通信来共享内存",通道是GO通过通信来共享内存的载体. rumtime包常用方法 runtime.NumGor ...

  9. COS 音视频实践 | 数据工作流助你播放多清晰度视频

    前言 你是否遇到过这样的场景: 兴致勃勃地观看心爱的视频,正当到了激动人心的高潮部分,却突然因为网速过差被迫陷入"转圈圈"的人生以及社会的大思考中. 又或者是身为网速畅通无阻的vi ...

  10. JZ-054-字符流中第一个不重复的字符

    字符流中第一个不重复的字符 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g&q ...