Java——三大特性之一:封装(概念理解+应用举例)

简介: Java——三大特性之一:封装(概念理解+应用举例)

1.概念理解:


在OOP中,封装(encapsulation)是指对于某个对象,Java隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。


封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。


要访问该类的代码和数据,必须通过严格的接口控制。


封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。


适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。


而封装的优点则有以下几点:


①良好的封装能够减少耦合。


②类内部的结构可以自由修改。


③可以对成员变量进行更精确的控制。


④隐藏信息,实现细节。


对于想要实现的操作,一个类已经将其封装好,你只需调用方法即可,这正是OOP中的精髓。

通过封装使一部分成员充当类与外部的接口,而将其他的成员隐藏起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。


我们还是举两个例子来更好的理解封装这个概念!!!👇👇👇



2.应用举例


Example 1:

import java.util.*;
class Member {
  public String name;//公共属性name
  public int salary;//公共属性salary
        private String sex;//私有属性sex
  public void setSex(String sex) {//定义一个公共的方法来设置sex属性
    this.sex=sex;
  }
  public String getSex() {//定义一个公共的方法来获取sex属性
    return this.sex;
  }
        public void setHobby(String hobby) {//定义一个公共的方法来设置hobby属性
    this.hobby=hobby;
  }
  public String getHobby() {//定义一个公共的方法来获取hobby属性
    return this.hobby;
  }
  public void talk() {//定义一个公共的方法talk
    System.out.println(name+"聊得非常开心!");
  }
}
public class Demo {
  public static void main(String[] args) {
    Member m=new Member();
    m.name="小红";//对公共属性name直接赋值
                m.salary=5000;//对公共属性salary也可以直接赋值
    m.setSex("女");//对私有属性操作,要通过get来访问、set来更改的方法
    m.setHobby("逛街");//同上
    System.out.println("姓名:"+m.name+",性别:"+m.getSex()
           +",薪水:"+m.salary+",爱好:"+m.getHobby()+"!");
    m.talk();//可以调用Member类中的公共方法talk
  }
}

运行结果如下:

上面这段代码,我们举例一个相对简单的例子,通过注释可以看到,这就实现了封装,对于公共属性name和salary,我们可以直接对其赋值;但是对于私有属性sex和hobby,我们需要通过使用set方法来为其赋值,再通过get方法来获取其值。


俗话说,概念理解的再多再准确,也不如写一段代码熟悉的更快!下面我们再举一个和上面类似的例子吧!!!👇👇👇


Example 2:

import java.util.*;
class Young {
  private String name;
  private int age;
  private String major;
  public void setName(String name) {
    this.name=name;
  }
        public void setAge(int age) {
    this.age=age;
  }
  public void setMajor(String major) {
    this.major=major;
  }
  public String getName() {
    return this.name;
  }
  public int getAge() {
    return this.age;
  }
  public String getMajor() {
    return this.major;
  }
}
public class Forever {
  public static void main(String[] args) {
    Young member=new Young();
    member.setName("张三");
    member.setAge(20);
    member.setMajor("计算机科学与技术");
    System.out.println("学生姓名:"+member.getName()+
          ",年龄:"+member.getAge()+
          ",专业:"+member.getMajor()+"!");
  }
}


运行结果如下:

这个例子和第一个差不多,大家可以去理解一下,如有问题,可以评论或者私信!!!

那么,以上就是博主对Java三大特性之一——封装的理解!!!



相关文章
|
12天前
|
存储 Java 程序员
Java的基础概念一
### Java编程基础简介 #### 一、注释 注释用于解释代码,不会参与编译和运行。Java支持三种注释: - **单行注释**:以 `//` 开头。 - **多行注释**:以 `/* ... */` 包围。 - **文档注释**:通常用于生成开发文档。 #### 二、关键字 关键字是被Java赋予特定含义的英文单词,全部小写,且在代码编辑器中有特殊颜色标记。常用的如 `class` 表示定义一个类。
Java的基础概念一
|
2天前
|
Java 数据安全/隐私保护
Java的基础概念(二)
本文介绍了Java编程语言中的运算符和表达式,涵盖算术运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符等。重点讲解了算术运算符的使用,如加减乘除取余,并强调了整数除法和取余的特殊性。同时,详细说明了隐式转换与强制转换的概念及应用场景,以及字符串和字符的拼接规则。通过多个案例演示了不同运算符的实际应用,包括数值拆分、自增自减、三元表达式的使用等。最后简要提及了运算符的优先级,指出小括号具有最高优先级。
|
13天前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
44 2
|
26天前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
1月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
57 6
|
2月前
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
163 6
|
1月前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
37 2
|
11天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
13天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
13天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。