Java封装

什么是封装?

封装是指在将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问

封装的作用

  • 隐藏类的实现细节

  • 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制堆成员变量的不合理访问

  • 可以进行数据检查,,从而有利于保证对象信息的完整性

  • 便于修改,提高代码的可维护性

  • 减少耦合:可以独立的开发、测试、优化、使用

  • 便于调节性能,可以通过剖析确定哪些模块影响了系统的性能

  • 降低了构建大型系统的风险:即使整个系统不可用,但是这些独立的模块可能是可用的

不封装可能出现问题

  class Student{//姓名String name;//年龄int age;//show()方法,显示所有成员变量public void show(){System.out.println("姓名:"+name);System.out.println("年龄:"+age);}}
class StudentDemo{public static void main(String[] args){//创建学生对象Student s=new Student();s.show();System.out.println("-----------");//给成员变量赋值s.name="林青霞";s.age=16;s.show();System.out.println("-----------");//给age重新赋值s.age=-27;//数据不合理 s.show();System.out.println("-----------");}}

通过示例可以发现,通过对象给成员变量赋值,常常可以赋值一些非法的数据,在现实场景中常常是不合理的

对数据进行判断,可以在构造方法,可以在普通方法,但是如果是较为复杂的逻辑,在构造方法中就会存在很大的问题

因此,对于这种情况,我们常常是限制用户对成员变量的使用权限,而是提供一个开放的方法, 用于将用户传递进来的数据做数据处理或逻辑判断后,再赋值给对象

示例:该动物园新来了一个动物,添加了编号、姓名、年龄、种类、品种,需要存储到数据库进行保存

package com.carl.javacore.encapsulation;/*** @PackageName com.carl.javacore.encapsulation* @Auther carl* @Description: TODO* @Version V1.0* @Date 2022-09-12 16:38* Modified By:TODO**/public class Animal {/*** 编号*/private String id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 种类*/private String type;/*** 品种*/private String varieties;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {if(age>100 || age<0){//抛出异常System.out.println("该变量赋值不合法!");//使用输出的方式代替异常的输出return;}this.age = age;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getVarieties() {return varieties;}public void setVarieties(String varieties) {this.varieties = varieties;}@Overridepublic String toString() {return "Animal{" +"id='" + id + '\'' +", name='" + name + '\'' +", age=" + age +", type='" + type + '\'' +", varieties='" + varieties + '\'' +'}';}
}
public class Test {public static void main(String[] args) {Animal a=new Animal();a.setId("8790");a.setName("巴顿");a.setAge(-24);a.setType("猫");a.setVarieties("蓝白");//然后将这个对象调用Mybatis的insert方法存储System.out.println(a);//这里通过输出的方式代替存储的操作}
}

输出结果:

该变量赋值不合法!
Animal{id='8790', name='巴顿', age=null, type='猫', varieties='蓝白'}

通过这种方式,我们确实可以避免用户保存脏数据,因为脏数据的存在极大可能性会导致程序的崩溃,因此封装是必要的

封装的原则

  • 将不需要对外提供的内容都隐藏起来

  • 把属性隐藏,提供公共方法对其访问

访问权限控制符

Java提供了四个访问权限控制符:private、public、protected、default,分别代表四个访问控制级别,控制级别由小到大

private
default
protected
public
privatedefaultprotectedpublic
同一个类中
同一个包中
子类中
全局范围内
  • private:当前类访问权限

    如果类里的一个成员(包括成员变量、方法和构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问,一般用于修饰成员变量和一些不愿意暴露给其他类访问的方法

  • protected:子类访问权限

    如果一个成员(包括成员变量、方法和构造器等)使用protected修饰,那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问,通常情况下,使用protected修饰的目的是希望其子类来重写这个方法

  • default:包访问权限

    如果类中的一个成员(包括成员变量、方法和构造器等)或一个外部类不使用任何访问控制符修饰,就称它为包访问权限,default访问控制的成员或外部类可以被相同包下的其他类访问

    Java8 中也作用于声明接口函数的默认实现

  • public:公共访问权限

    最大的访问控制级别,如果一个成员(包括成员变量、方法和构造器等)或者一个外部类使用public访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否处于同一个包,是否具有父子继承关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840450.shtml

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

相关文章

WMI技术介绍以及使用WMI技术获取系统信息

WMI简介 Windows Management Instrumentation&#xff08;WMI&#xff09;是Microsoft Windows操作系统中一个强大的管理框架&#xff0c;它允许管理员以及开发者以标准化的方式访问和控制系统的各种硬件、操作系统组件、应用程序以及网络资源。WMI是基于Web-Based Enterprise…

React Suspense与Concurrent Mode:异步渲染的未来

React的Suspense和Concurrent Mode是React 16.8及更高版本引入的概念&#xff0c;旨在提升用户体验和性能&#xff0c;特别是在处理异步数据加载和动画时。它们是React的下一代渲染策略的一部分&#xff0c;目的是实现更流畅的交互和更高效的资源调度。 Suspense Suspense是一…

Linux之单机项目部署

1、虚拟机&#xff08;VMware&#xff09;创建Linux系统 1.1、创建虚拟机 1.2、配置虚拟机IOS映射文件 1.3、虚拟机内部相关配置 等待加载即可&#xff0c;加载完后会弹出图形化界面&#xff0c;如图&#xff1a; 注意&#xff1a;一般我们做为管理员使用ROOT账号来操作&#x…

[AI Google] Android的防盗功能可保护您的设备和数据安全

Android的新功能可在盗窃发生前、期间和之后帮助保护您的数据的三种方式。 智能手机帮助我们处理日常任务&#xff0c;如在线银行业务、存储敏感信息、为朋友和家人拍照以及快速支付购物。尽管手机让我们的生活变得更加便捷&#xff0c;但它们也包含了大量宝贵信息&#xff0c…

微服务架构(如SpringCloud )中业务中台概念讲解

概念讲解 在微服务架构特别是Spring Cloud技术领域中&#xff0c;业务中台&#xff08;Business Middle Platform, BMP&#xff09;是一个关键概念&#xff0c;旨在通过整合和复用企业的核心业务能力&#xff0c;提高业务响应速度和敏捷性。以下是业务中台的详细讲解&#xff…

数据结构和算法基础(二)

树和二叉树——树的基本概念 树和二叉树——树转二叉树 树和二叉树——查找二叉树&#xff08;二叉排序树&#xff09; 树和二叉树——构造霍夫曼树&#xff08;最优&#xff09; 树和二叉树——线索二叉树 树和二叉树——平衡二叉树 图——基本概念 1、有向图 2、无向图 3、完…

BGP路由优化

一&#xff0c;拓扑 二&#xff0c;要求 用preva1策略确保R4通过R2到达192.168.10.0/24 &#xff0c;用AS Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 .用Local Preference策略&#xff0c;确保R1通过R2到达1…

android NetworkMonitor记录

是否能上网的状态 上网url地址的设置&#xff1a; NetworkMonitor.java makeCaptivePortalHttpsUrls config_captive_portal_https_urls DEFAULT_CAPTIVE_PORTAL_HTTPS_URLS http准备监测 isCaptivePortal sendHttpAndHttpsParallelWithFallbackProbes httpsProbe.start();…

FTP介绍

FTP 1、FTP—文件传输协议 文件传输协议&#xff08;File Transfer Protocol&#xff0c;FTP&#xff09;是用于在网络上进行文件传输的一套标准协议&#xff0c;它工作在 OSI 模型的第七层&#xff0c; TCP 模型的第四层&#xff0c; 即应用层&#xff0c; 使用 TCP 传输&…

PCB设计——返回路径

回流基本概念 从电路理论上看&#xff0c;信号是由电流传播的&#xff0c;明确的说是电子的运动&#xff0c;电子流的特性之一就是电子从不在任何地方停留&#xff0c;无论电流流到哪里&#xff0c;必然要回来&#xff0c;因此电流总是在环路中流动&#xff0c;从源到负载然后从…

[手游] 正义对决3

《正义对决3联机版》是一款多人联机的竞技射击游戏&#xff0c;玩家将扮演警方和强盗两个不同的势力&#xff0c;展开一场在庞大都市中的正义之战。强盗一方将在城市内抢劫各处并藏匿&#xff0c;而警方则必须将所有罪犯绳之以法。游戏中&#xff0c;玩家可自由购买众多武器装备…

构建数字未来:探索Web3在物联网中的新视角

引言 随着Web3时代的来临&#xff0c;物联网技术正迎来一场新的变革。在这个数字化时代&#xff0c;Web3所带来的技术创新将为物联网的发展开辟新的视角。本文将深入探讨Web3在物联网领域的应用&#xff0c;揭示其在构建数字未来中的重要性和影响。 Web3与物联网的融合 区块链…

Stream API 和 Lambda表达式

Java 8 Stream API 内容 操作类型&#xff1a; 中间操作&#xff1a;对流中的元素进行操作&#xff0c;如过滤&#xff08;filter&#xff09;、映射&#xff08;map&#xff09;、排序&#xff08;sorted&#xff09;、查找&#xff08;findFirst&#xff09;等。终端操作&a…

Python设计模式之适配器模式

目录 一、适配器模式 适配器模式的组成部分 适配器模式的种类 应用场景 实现步骤 二、测试例子 一、适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将一个现有接口转换为另一个期望的接口来让不兼容的接口能够合作…

生产物流智能优化系统

对生产调度、物流调度【车辆路径问题、配送中心拣选问题】智能优化算法研究形成系统性程序&#xff0c;逐步开发设计一个智能优化系统【包括&#xff1a;问题说明、实验界面、算法结构和算法程序应用说明】&#xff0c; 当前完成TSP和集送车辆路径的算法程序&#xff0c;程序效…

华为芯片与系统详细梳理--Kirin麒麟 Ascend昇腾 Kunpeng鲲鹏 HarmonyOS鸿蒙 Euler欧拉

华为芯片与系统详细梳理--Kirin麒麟 & Ascend昇腾 & Kunpeng鲲鹏 & HarmonyOS鸿蒙 & Euler欧拉 1 概述2 芯片2.1 整体描述麒麟芯片&#xff08;To C&#xff09;【面向智能终端】昇腾芯片【面向AI计算】鲲鹏芯片【面向通用计算】 2.2 细分系列麒麟芯片&#xf…

C#【进阶】迭代器

迭代器 文章目录 1、迭代器概念2、标准迭代器的实现方法3、用yield return 语法糖实现迭代器4、用yield return 语法糖为泛型类实现迭代器 1、迭代器概念 迭代器&#xff08;iterator&#xff09; 又称光标&#xff08;cursor&#xff09; 是程序设计的软件设计模式 迭代器提供…

【网络技术】【Kali Linux】Wireshark嗅探(十二)NBNS协议报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

linux添加hdmi、dp自定义分辨率

https://cn.linux-console.net/?p1452 未测试 $ xrandr Screen 0: minimum 16 x 16, current 2560 x 1440, maximum 32767 x 32767 XWAYLAND0 connected primary 2560x144000 (normal left inverted right x axis y axis) 600mm x 330mm2560x1440 59.96*1920x1440 59…

加入MongoDB AI创新者计划,携手MongoDB共同开创AI新纪元

加入MongoDB AI创新者计划&#xff01; MongoDB对AI创新和初创企业的支持既全面又广泛&#xff01;无论您是领先的AI初创企业还是刚刚起步&#xff0c;MongoDB Atlas都是支持您愿景的最佳平台。 AI 初创者计划The AI Startup Track AI初创者计划为早期初创企业提供专属福利&…