java学习笔记6

news2024/11/25 11:45:38

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种访问权限按级别由小到大依次列出:

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

访问范围 private default protected public
同类中
同包中
不同包子类
全局范围
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.coloradmin.cn/o/1607246.html

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

相关文章

electron打包编译国产统信uos系统 arm架构 x86架构 linux mac等环境

electron v21版本以上统信UOS会提示gbm_bo_map错误&#xff0c;可使用v8~v21版本的electron 打包linux包需要再linux系统下运行编译&#xff0c;arch可以指定架构 如果要在统信uos上运行&#xff0c;需要打包成deb格式&#xff0c;在target中修改成deb 或者用第三方软件把app…

3. 无重复字符的最长子串/438. 找到字符串中所有字母异位词/560. 和为 K 的子数组

3. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 思路&#xff1a;想象一下我们…

C语言 选择控制结构(1) 了解选择结构 关系运算符讲解 基本逻辑判断演示

接下来 我们来说 选择控制结构 在生活中 我们也有很多需要分支结构的例子 比如: 计算两个整数的最大值 计算n个数的最大值&#xff0c;最小值 判断三角形三边能否构成三角形? 判断某年是否是闰年? 判断输入的英文字母是大写还是小写? 我们在程序开发中 需要根据某种条件 进…

重磅!Meta 发布 Llama 3,前所未有的强大功能和多模态能力|TodayAI

Meta今日宣布推出其最新一代尖端开源大型语言模型Llama 3。该模型预计很快将在多个领先的云服务平台上线&#xff0c;包括AWS、Databricks、Google Cloud、Hugging Face、Kaggle、IBM WatsonX、Microsoft Azure、NVIDIA NIM和Snowflake。 Llama 3模型得到了AMD、AWS、Dell、In…

解决VirtualBox虚拟机启动失败的问题

一.出现的问题&#xff08;未能启动虚拟电脑&#xff0c;由于物理网卡未找到&#xff09; 一、错误信息分析 “未能启动虚拟电脑&#xff0c;由于物理网卡未找到”&#xff1a;这个错误通常是由于VirtualBox无法识别或连接到物理网卡造成的。可能是由于驱动程序问题、网络设置错…

Hadoop——Yarn 调度器和调度算法

Yarn 调度器和调度算法 YARN调度器&#xff08;Scheduler&#xff09;是负责将集群资源分配给不同应用程序的组件。它根据应用程序的资源需求和优先级&#xff0c;以及集群的资源供给情况&#xff0c;决定如何分配资源。YARN提供了多种调度器实现&#xff0c;每种调度器都有不…

力扣:219. 存在重复元素 II

力扣&#xff1a;219. 存在重复元素 II 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …

服务调用-微服务小白入门(4)

背景 各个服务应用&#xff0c;有很多restful api&#xff0c;不论是用哪种方式发布&#xff0c;部署&#xff0c;注册&#xff0c;发现&#xff0c;有很多场景需要各个微服务之间进行服务的调用&#xff0c;大多时候返回的json格式响应数据多&#xff0c;如果是前端直接调用倒…

ST-GCN模型详解(+openpose)

ST-GCN模型详解&#xff08;openpose&#xff09; 一、什么是ST-GCN呢 基于骨架的动作识别&#xff08;Skeleton-Based Action Recognition&#xff09;主要任务是从一系列时间连续的骨骼关键点&#xff08;2D/3D&#xff09;中识别出正在执行的动作。因为牵涉到骨骼框架这种…

工控CTF之协议分析类型

协议分析 主要以工控流量和恶意流量为主&#xff0c;难度较低的题目主要考察Wireshark使用和找规律&#xff0c;难度较高的题目主要考察协议定义和特征 简单只能简单得干篇一律&#xff0c;难可以难得五花八门 常见的工控协议有&#xff1a;Modbus、MMS、IEC60870、MQTT、CoA…

完整版软件建模复习题和答案

一、单选题 D &#xff09;1&#xff0e;下面哪个不是信息系统利益相关者&#xff1f; A&#xff0e;客户 B&#xff0e;用户 C&#xff0e;开发人员 D&#xff0e;监理人员 B &#xff09;2&#xff0e;下面哪项不是用户主要关注的软件质量属性&#xff1f; A&#xff0e;…

解线性方程组——上三角、下三角,回代算法 | 北太天元

解上三角(回代) a i i ≠ 0 a_{ii\neq0} aii0​ , i 1 , 2 , … , n i1,2,\ldots,n i1,2,…,n a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 22 x 2 ⋯ a 2 n x n b 2 ⋯ a n n x n b n \begin{aligned} a_{11}x_1a_{12}x_2\cdotsa_{1n}x_n&b_1 \\ a_{22}x_2\cdotsa_…

基于Matlab机器人工具箱对Dobot机械臂的研究

文章目录 文章目录 前言 一、Dobot Mangician 分析 二、Matlab 机器人工具箱 1. 建立模型 2. DoBot 正向运动学 3. Dobot 逆运动学 4. Dobot workpace 5. Dobot轨迹规划 三、Dobot studio 1. DoBot teaching 2. DoBot Python 程序 总结 前言 在本实验中&#xf…

自如电费均摊问题

3月份搬了次家&#xff0c;嫌麻烦租了自如&#xff0c;第一个月的电费账单出来了&#xff0c;由于我是中途搬进去的&#xff0c;于是乎就好奇他会如何计算均摊&#xff0c;这个月电费账单出来了&#xff0c;算了下发现了点东西。 先说结论&#xff1a;按照我的这个均摊的方式&a…

TCP报文与三次握手四次断开、TCP最大连接数与文件打开数限制、keepalive、tcpdump、wireshark抓包分析工具

TCP报文 tcp详解、tcp与udp对比等 TCP:传输控制协议 UDP&#xff1a;用户数据报协议 源端口和目的端口字段&#xff1a;各占 2 字节&#xff08;16位&#xff09;。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。 序列号&#xff1a;在建立…

万兆以太网10G Ethernet简介

2002年6月IEEE标准协会批准了万兆&#xff08;10G&#xff09;以太网的正式标准。此标准的全名是“10Gbit/s工作的媒体接入控制参数、物理层和管理参数”。 另一个组织是10G以太网联盟(10GEA)。10GEA由网络界的著名企业创建&#xff0c;现已有一百多家企业参加&#xff0c;中国…

Pytorch DistributedDataParallel(DDP)教程一:快速入门理论篇

Pytorch DistributedDataParallel&#xff08;DDP&#xff09;教程一&#xff1a;快速入门理论篇 目录 一、 写在前面二、什么是分布式并行训练1. 并行训练2. 数据并行 三、DDP的基本原理1. DDP的训练过程2. Ring-All-Reduce算法 四、如何搭建一个Pytorch DDP代码框架1. 与DDP有…

javaScript常用知识点

1. this指向问题 在绝大多数情况下&#xff0c;函数的调用方式决定了this的值。this不能在执行期间被赋值&#xff0c;并且在每次函数被调用时this的值也可能会不同。 this指向的对象称为函数的上下文对象context&#xff1b;this的指向取决于函数被调用方式this的指向不是函数…

【机器学习】小波变换在特征提取中的实践与应用

小波变换在特征提取中的实践与应用 一、小波变换的基本原理与数学表达二、基于小波变换的特征提取方法与实例三、小波变换在特征提取中的优势与展望 在信号处理与数据分析领域&#xff0c;小波变换作为一种强大的数学工具&#xff0c;其多尺度分析特性使得它在特征提取中扮演着…

云服务器部署Springboot项目

前端项目打包 修改ip地址 在控制台输入npm run build:prod 会产生dist文件 将dist文件中的内容移动至/usr/local/nginx/html目录下 后端项目打包 修改ip地址 执行clean操作 执行install操作 将生成的target文件中的jar包移动至/usr/local/src目录下 启动 注意⚠️&#xff…