怎样解析java中的封装

Java Socket报文通信:报文的封装与解析 在Socket通信中,报文的封装和解析是非常重要的步骤。通过以上的报文封装和解析的示例代码,我们可以在Java Socket通信中方便地进行报文的传输和处理。当然,实际应用中还需要考虑报文的完整性、错误处理等方面的问题,但本文的示例代码可以作为一个基础框架进行扩展和改进。报文通常由报文头和报文体组成,报文头用于描述报文的元信息,报文体则存放真正的数据。下面是一个简单的Socket通信示例,其中服务器端监听端口号为8888,客户端连接到服务器的IP地址为"127.0.0.1",端口号为8888。 阅读详情

1.解析java中的封装

1.1 以生活中的例子为例,打开电视机的时候你只需要按下开关键,电视机就会打开,我们通过这个操作我们可以去间接的对电视机里面的元器件进行亮屏和显示界面操作,具体怎么实现我们并不知道,我们只需要通过这个公共的电源键去对电视机进行操作就行。

1.2 封装也是同理,它会把一些属性(成员变量)拿个黑盒子装起来,然后使用者是直接接触不到这些属性的,使用时,通过一些公共方法(中间商)去进行访问。

1.3 是为了信息隐藏, 禁止直接访问 一个对象中的数据的实际表现形式,通过接口去进行访问

1.4 封装=私有化属性+公共调用属性的方法

2 为什么需要封装?

2.1 保证输入的数据是合理的
题目:定义一个Cat类,用户需手动输入猫的寿命;假设猫的最长寿命为20岁,那么输入大于20的数或者小于0的数字显然是非法的

没有封装时

示例代码

public class Cat {
 
    String  name;
    String type;
    int age;
    public Cat(){
 

    }
    //定义有参构造,方便实例化对象时,初始化值
    public Cat(String name, String type, int age) {
 
        this.name = name;
        this.type = type;
        this.age = age;
    }
    public void showInfo(){
 
        System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
    }

}

TestCat

public class TestCat {
 
    public static void main(String[] args) {
 
        Cat cat=new Cat("叮当","狸花猫",100);
        System.out.println("修改前: ");
        cat.showInfo();
        cat.age=-2;
        System.out.println("修改后: ");
        cat.showInfo();
    }
}

可以明显的发现,用户可以通过 对象名.属性值 的方式去修改属性,而且修改属性的值没有限制,输入啥就输出啥,显然输入猫的年龄为200或者-2都是是错的

而且构造方法 初始化 时也没有去判断数据的合法性

示例代码运行截图

示例代码

public class Cat {
 
    private String  name;
    private String type;
    private int age;
    public Cat(){
 

    }
    //定义有参构造,方便实例化对象时,初始化值
    public Cat(String name, String type, int age) {
 
        this.name = name;
        this.type = type;
        setAge(age);
    }

    public String getName() {
 
        return name;
    }

    public void setName(String name) {
 
        this.name = name;
    }

    public String getType() {
 
        return type;
    }

    public void setType(String type) {
 
        this.type = type;
    }

    public int getAge() {
 
        return age;
    }

    public void setAge(int age) {
 
        if(age<0||age>20){
 
            System.out.println("初始化的年龄有误,请检查后重新输入!!!");
            return;
        }
        this.age = age;
    }

    public void showInfo(){
 
        System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
    }

}

TestCat

public class TestCat {
 
    public static void main(String[] args) {
 
        Cat cat=new Cat("叮当","狸花猫",100);
        System.out.println("修改前: ");
        cat.showInfo();
        System.out.println("修改后: ");
        cat.setAge(10);
        cat.showInfo();
    }
}

你会发现实例化cat对象时,对年龄赋值的100并没有成功,因为没有符合年龄的条件,因而 被赋予了默认值

而通过set方法去设置(写入)合理的年龄,会发现年龄是可以被设置成功的

也就是说封装可以将一些不合理的数据过滤掉,不被赋值进去,这样可以使程序的数据变得更加合理。

示例代码运行截图

2.2 可以设置属性的特性(只读、可读写、可写)
没有封装时
示例代码

public class Cat {
 
    String  name;
    String type;
    int age;
    public Cat(){
 

    }
    //定义有参构造,方便实例化对象时,初始化值
    public Cat(String name, String type, int age) {
 
        this.name = name;
        this.type = type;
        this.age=age;
    }

    public void showInfo(){
 
        System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
    }

}
TestCat
public class TestCat {
 
    public static void main(String[] args) {
 
        //猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
        Cat cat=new Cat("叮当","狸花猫",8);
        System.out.println("修改猫的品种前: ");
        cat.showInfo();
        System.out.println("修改猫的品种后: ");
        cat.type="短尾";
        cat.showInfo();
    }
}

按照常理来说,猫的品种一经出生就已经限定死了,也就是说它是 可读属性 ,但是上面的例子可却以对不可更改的属性进行修改,因此这就也是没有封装的一个弊端,属性的特性在它面前都是属于"我们都一样"的这种效果。”(啥都是可以读写)

示例代码运行截图

示例代码

public class Cat {
 
    String  name;
    private String type;
    int age;
    public Cat(){
 

    }
    //定义有参构造,方便实例化对象时,初始化值
    public Cat(String name, String type, int age) {
 
        this.name = name;
        this.type = type;
        this.age=age;
    }
    //获取当前猫对象的品种
    public String getType() {
 
        return type;
    }

    public void showInfo(){
 
        System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
    }

}
TestCat
public class TestCat {
 
    public static void main(String[] args) {
 
        //猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
        Cat cat=new Cat("叮当","狸花猫",8);
        System.out.println("修改猫的品种前: ");
        cat.showInfo();
        System.out.println("修改猫的品种后: ");
        cat.type="短尾";
        cat.showInfo();
    }
}

按照常理来说,猫的品种一经出生就已经限定死了,也就是说它是 可读属性 ,但是上面的例子可却以对不可更改的属性进行修改,因此这就也是没有封装的一个弊端,属性的特性在它面前都是属于"我们都一样"的这种效果。”(啥都是可以读写)

示例代码运行截图

示例代码

public class Cat {
 
    String  name;
    private String type;
    int age;
    public Cat(){
 

    }
    //定义有参构造,方便实例化对象时,初始化值
    public Cat(String name, String type, int age) {
 
        this.name = name;
        this.type = type;
        this.age=age;
    }
    //获取当前猫对象的品种
    public String getType() {
 
        return type;
    }

    public void showInfo(){
 
        System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
    }

}

TestCat

public class TestCat {
 
    public static void main(String[] args) {
 
        //猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
        Cat cat=new Cat("叮当","狸花猫",8);
        System.out.println("修改猫的品种前: ");
        cat.showInfo();
        System.out.println("修改猫的品种后: ");
        cat.type="短尾";
        cat.showInfo();
    }
}

这个时候程序不会正常运行,因为把type属性私有化后,不能通过对象名.属性名的方式进行调用,然后也只能通过getType方法获取它的值, 没有set方法 ,因此不能修改它的值

示例代码出现错误的截图

3 如何使用封装?

3.1 先私有化属性

private String  name;
 private String type;
 private int age;

3.2 然后根据需求去进行公开方法(get/set)

//显然猫的名字是可读写性质,品种是只读属性,年龄为可读写属性
//为可读写属性就是set方法以及get方法都有,只读属性就是只有get方法
 public String getName() {
 
        return name;
    }

    public void setName(String name) {
 
        this.name = name;
    }
    //type(品种)属性只可以读取,不可以写入
    public String getType() {
 
        return type;
    }

    public int getAge() {
 
        return age;
    }

    public void setAge(int age) {
 
        if(age<0||age>20){
 
            System.out.println("猫的年龄输入有误,请检查后重新输入!!!!");
            return;
        }
        this.age = age;
    }

3.3完整代码

public class Cat {
 
    private String  name;
    private String type;
    private int age;
    public Cat(){
 

    }
    //定义有参构造,方便实例化对象时,初始化值
    public Cat(String name, String type, int age) {
 
        this.name = name;
        this.type = type;
        this.age=age;
    }

    public String getName() {
 
        return name;
    }

    public void setName(String name) {
 
        this.name = name;
    }
    //type(品种)属性只可以读取,不可以写入
    public String getType() {
 
        return type;
    }

    public int getAge() {
 
        return age;
    }

    public void setAge(int age) {
 
        if(age<0||age>20){
 
            System.out.println("猫的年龄输入有误,请检查后重新输入!!!!");
            return;
        }
        this.age = age;
    }

    public void showInfo(){
 
        System.out.println("猫的名字为: "+name+" 猫的品种为: "+type+" 猫的年龄为: "+age);
    }

}

TestCat

public class TestCat {
 
    public static void main(String[] args) {
 
        //猫的品种一经出生,就不能修改了,但是我这边还是可以通过对象名.属性名的方式去修改
        Cat cat=new Cat("叮当","狸花猫",8);
        System.out.println("一年前: ");
        cat.showInfo();
        cat.setName("小梦");
        System.out.println("获取猫的品种: "+cat.getType());
        cat.setAge(9);
        System.out.println("一年后: ");
        cat.showInfo();
    }
}

3.4 完整代码运行截图

告别上位机!用MCGS触摸屏+FTP服务器,5分钟搞定工控机文件自动同步 本文介绍了一种工业自动化领域的高效解决方案,通过MCGS触摸屏结合FTP服务器实现工控机文件的自动同步,无需开发上位机软件。该方案特别适用于图像采集、参数同步、数据备份等场景,具有成本低、可靠性高、维护简便等优势。详细配置指南和实战案例帮助用户快速实现零代码文件同步。 阅读详情

相关推荐

WinCC与施耐德PLC的Modbus TCP通信实战指南

本文详细解析了西门子WinCC与施耐德PLC通过Modbus TCP协议实现通信的完整实战流程。内容涵盖硬件网络配置、Modbus地址映射核心规则、WinCC驱动连接建立、变量创建及高级数据访问技巧,并提供了常见故障排查思路,帮助工程师高效解决跨品牌设备通信难题。

weixin_29194693的博客 1005

JAVA——封装

代码要笑着写——深度剖析内部类的那些秘密……

qq_59854519的博客 9309

2026年AI编程工作流实战:Claude Code与Open Code深度对比

AI编程已从代码生成工具升级为IDE级智能工作流核心能力。其本质是将大语言模型深度嵌入开发环境,通过语义理解、上下文感知与行动闭环重构传统编码范式。Claude Code以企业级知识图谱和双轨Code Review为代表,强调合规性、可审计与深度集成;Open Code则依托Skill可组合性、本地优先模型与ocp协议,实现开源驱动的灵活扩展。二者共同推动IDE从‘编辑器’进化为‘数字搭档’——能理解RFC文档、记住PR评论、自动补全带重试的fetch逻辑,并在Promise链发呆时一键重构为async/a

weixin_33739523的博客 472

Java三大特性之一—— 封装

封装指的是将数据和操作数据的方法有机结合,同时对外隐藏内部的细节,只暴露必要的接口供其他对象使用。封装性的主要目的是保护数据,防止外部的不合理访问和修改,从而提高代码的可维护性和可复用性。

L326214的博客 1286

新硬盘到手,在统信UOS或麒麟系统上怎么认?保姆级教程从识别到挂载一步到位

本文提供新硬盘在统信UOS或麒麟KYLINOS系统上的完整配置指南,从识别物理硬盘到挂载全流程详解。通过终端命令如df和lsblk,帮助用户完成硬盘识别、分区、文件系统创建及挂载配置,确保新硬盘顺利投入使用。

weixin_30698297的博客 444

用COMSOL计算复合材料板频散曲线:从建模到绘图全流程

导波在板结构中传播时,不同频率成分的速度不同,即频散现象。理解频散曲线是识别导波模态、确定相速度与群速度的基础,也是无损检测和结构健康监测中信号解读的关键。对于碳纤维增强复合材料等各向异性板,频散关系更加复杂,传统解析方法难以求解,数值仿真成为主流手段。通过COMSOL结合周期性边界条件与特征频率扫描,可以高效计算出复合材料板的频散曲线,进而绘制相速度和群速度随频率变化的图谱,为实验模态识别、换能器激励频率选择提供依据。本文以一个2毫米单向碳纤维板为例,详细介绍几何建模、材料参数设置、网格收敛验证、参数扫描

weixin_31412781的博客 235

java中运行多态时的含义是什么?有什么作用?

运行时多态:当同一个引用变量(父类引用)指向不同的子类实例,然后访问引用变量成员方法, 方法会有不同的表现。换句话说,运行时多态就是重写,就是子类方法重写了父类方法。使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。 作用:运行时多态性提供了更大的灵活性,因为所有事情都在运行时得到解决。 ...

passsss的博客 374

YOLOv8+ByteTrack实战:5分钟搞定多目标跟踪(附鱼群检测调参秘籍)

本文详细介绍了如何利用YOLOv8和ByteTrack快速实现多目标跟踪,特别针对鱼群检测等复杂场景提供参数调优秘籍。通过环境配置、核心机制解析和专项调优技巧,开发者可在5分钟内搭建高效跟踪系统,适用于水产养殖、交通监控等实际应用。文章还包含工程落地方案和性能优化建议,帮助实现精准的鱼群计数与行为分析。

e1f2g的博客 1019

Java 基础系列(一) --- 对封装的理解

  封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现的, 只要知道如何使用类就行了, 这样就降低了类使用者的学习和使用成本, 也降低了代码的复杂程度.

Fug_Lee的博客 909

pytorch 51 GroundingDINO模型导出tensorrt并使用c++进行部署,53ms一张图

博主基于https://github.com/hpc203/GroundingDINO-onnxrun项目分享的onnx c++推理代码,修改为GroundingDINO模型的tensorrt推理代码。对于600x400的输入,在3060显卡下,cuda 12.1,TensorRT-10.4.0,window环境下53ms处理完一张图片。

a486259的博客 1221

【软件测试】人工智能(AI)在软件测试领域的应用

AI在软件测试领域的应用使测试过程更加自动化、高效和智能。它可以帮助测试团队减轻负担,更快地识别和修复问题,最终提高软件的质量和可靠性。随着AI技术的不断进步,未来AI在软件测试领域的应用将更加广泛和深入。

weixin_46453070的博客 4388

java 深度解析面向对象封装

面向对象的三大特征之一封装 将描述事物的数据和操作封装在一起,形成一个类;被封装的数据和操作只有通过提供的公共方法才能被外界访问(封装隐藏了对象的属性和实施细节),私有属性和方法是无法被访问的,表现了封装的隐藏性,增加数据的安全性。 目的与实现类就是对现实实体或者虚拟对象的抽象表示,抽象就是有选择 的忽略,而封装就是忽略的具体实现手段。 优点: 1、提高了安全性 封装的关键是绝对不能让类中的方法直...

fyyxc的博客 173

组态王与SqlServer数据库交互总结

组态王可以与SqlServer、mysql、acess、oracle等数据库进行数据交互。 本文重点梳理了如何把组态王中的数据保存到SqlServer数据库中,并使用ADO控件对数据库中的数据进行查询。 一、数据存到SQL数据库 1.新建记录体 2、创建表格模板(用于创建数据库中的表格) 3、打开sqlserver,新建数据库 4、创建ODBC数据源 选择自己新建的数据库 5.使用SQLConnect函数连接数据库,SQLCraetTable函数用于在数据库中创建表格 6.使用

逍遥子的博客 2万+

解析java中的封装

本文详细解析java中三大特性中的封装特性

SSS4362的博客 504

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

fastjson 的 java解析 和封装

【代码】fastjson 的 java解析 和封装。

m0_70985211的博客 357

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java 封装和解析报文_IS08583报文协议包的解析和封装java源代码

前段时间做了一个涉及到IS08583报文协议的项目,自己总结写了这篇附有java源代码的文章,希望能给大家提供一些帮助,本文分四个部分介绍IS08583报文协议包的处理及如何解析请求包及怎样封装返回包,一:IS08583包介绍:ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。8583包前面一段为位图,用来确定包的字段域组...

weixin_35682426的博客 536

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java对JSON数据的封装与解析

package com.example.demo.util; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * JSON数据的工具类,可以封装JSOn对象、JSON数组字符串 */ public class JsonUtil { /** * 封装单个的JSON数据(有Key) */ public static String cr.

baidu_38995168的博客 608

java后台封装和解析json数据

//1.封装集合 List list = new ArrayList(); list.add( "first" ); list.add( "second" ); JSONArray jsonArray1 = JSONArray.fromObject( list ); System.out.println("集合:"+jsonArray1); //2.封装数组 int[] Array

qq_34851184的博客 1149

Java 封装:从基础到进阶的深度解析

Java 封装作为面向对象编程的重要特性,在代码的安全性、可维护性和复用性方面发挥着关键作用。通过私有化属性、提供公共访问方法和封装业务逻辑,我们能够构建出结构清晰、易于维护和扩展的程序。无论是在日常开发还是面试过程中,深入理解和熟练运用封装,都是 Java 开发者必备的技能。希望本文的内容能够帮助你对 Java 封装有更全面、更深入的认识,在 Java 编程的道路上不断进步。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 649

java解析excel表格,得到数据并封装到一个对象中

使用java读取excel表格,目前所知的主要有两种方式。一种是导入poi包,另一种是导入jxl包,这次我用的主要是jxl-2.6.12.jar。jar包可以去maven仓库下载。导好java包好先新建封装数据的对象,里面是从excel表格中读取出来的数据package utlis; import java.util.Arrays; //最后要传出的数据 public class ExcelO...

yuefolkt的博客 3839

同java的dom解析xml并封装为对象

解析xml文件并封装对象。

happyInHappy的博客 425

java dom4j解析xml 对象_使用dom4j解析xml文件,并封装为javabean对象

dom4j是一个java的XML api,性能优异、功能强大、易于使用。这里使用dom4j对xml文件进行解析,并完成对文件的封装。在pom文件里面导入dom4jdom4j1.6.1实现对xml文件的解析,主要使用到的是dom4j中的SAXReader类,该类的使用方法如下:SAXReader 类//构造SAXReaderSAXReader sr = new SAXReader();//加载文件D...

weixin_39891438的博客 385

java封装json数组,js解析json数组

java疯转json数组: JSONArray jArray = new JSONArray();         for(int i = 0; i         {             JSONObject jObj = new JSONObject();             try {                 jObj.put(ConstantUtil.CERT

autowanglei的专栏 2036

java 封装解析 Json数据。

import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSON...

weixin_33862041的博客 149

Java封装解析

Java封装

m0_52818006的博客 183

Java多级封装对象解析

多级Java对象封装后的解析参数过程 (更多方法持续更新中)

MircoO的博客 468
上一篇: 你知道一个Java对象到底占多少内存吗?
下一篇: 掉了两根头发,可算是把volatile整明白了
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值