news 2026/8/28 11:53:12

112、类与对象基础:从一次“变量神秘消失”说起

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
112、类与对象基础:从一次“变量神秘消失”说起

112、类与对象基础:从一次“变量神秘消失”说起

那天的场景我记得很清楚。一个很常规的ALV报表增强,我在某个全局类里加了一个计数器,想在主程序里多次调用同一个方法后累计打印次数。代码写得很顺,SE24里创建类、定义属性、实现方法,然后回主程序里CREATE OBJECTCALL METHOD,一切似乎都在预料之中。可是跑起来之后,计数器永远只显示1。我把断点打在那个方法内部,属性值明明已经加到3了,一退到外面再读,又是0。那时候我还没完全想通:这到底是被谁重置了?还是我写的逻辑有问题?我甚至怀疑是不是SAP有bug。后来才知道,我掉进的是最基础的“类与对象”概念坑——我一直在用同一个类创建了两个不同的对象,方法里改的是A对象的属性,外面读的却是B对象的属性。那个瞬间,我才真正意识到:类只是一个模板,对象才是真实的运行个体。

这个话题放到今天讲,虽然目录上写着“类与对象基础”,但我想换个方式说。不是从“类是抽象的概念,对象是具体的实例”这种教科书定义开始,而是直接面对刚才那个场景。为什么同样的代码,两个变量互不相干?因为每一个CREATE OBJECT生成的实例,都拥有自己独立的一份属性存储空间。如果你在程序里写了两次CREATE OBJECT lo_obj,那就有两个盒子,每个盒子里都有一份自己的计数器。方法代码只有一份,但方法操作的数据属于调用它的那个实例。这就好比食堂的菜谱是一张纸,但每个厨师炒出来的鱼香肉丝,用的都是自己灶台上的那碗肉丝,不是共享的。

那么怎么正确地用一个类来管理一个共享状态?最简单的办法,要么外面只创建一个对象,反复用这个句柄去调用方法;要么把属性改成

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 11:53:03

115、继承与多重继承(ABAP的替代关系)

115、继承与多重继承(ABAP的替代关系) 调试一个诡异问题时我差点掀了办公桌:子类里明明重写了父类方法,程序却依然走的是旧逻辑。断点打上去,Eclipse连个反应都不给,函数出栈后数据照旧。最后发现压根不是方法调用的问题,而是我把一个内表类型定义在了子类的私有区,父…

作者头像 李华
网站建设 2026/8/28 11:50:09

STM32WB实战:Zigbee 3.0开发环境搭建与组网避坑指南

前几天看到ST的官网更新,STM32无线MCU的官方固件正式把Zigbee 3.0协议栈纳入支持范围。说句实话,这个动作对做智能家居、传感网络、工业无线采集的人来说,是个挺实在的好消息。以前想在STM32上跑Zigbee,要么用外挂透传模块&#x…

作者头像 李华
网站建设 2026/8/28 11:46:06

C++异常处理:从RAII到异常安全,构建健壮程序的工程实践

1. 从“崩溃”到“优雅”:为什么C异常处理是程序员的必修课 干了这么多年C,我见过太多因为一个文件打开失败、一个内存分配错误,或者一个简单的除零操作,就导致整个程序直接崩溃退出的情况。用户看着黑屏或者一个冷冰冰的“程序已…

作者头像 李华
网站建设 2026/8/28 11:46:00

TOPSIS优劣解距离法:从原理到实战的多属性决策指南

1. 从“选谁最好”到“谁离理想最近”:TOPSIS法的核心思想 做决策,尤其是那种需要从一堆选项里挑出一个“最优”的,是件挺让人头疼的事。比如,公司要采购一批服务器,有A、B、C、D四个供应商的方案,每个方案…

作者头像 李华
网站建设 2026/8/28 11:41:45

Sunshine 游戏串流服务器:从安装到首次串流的免费完整教程

Sunshine 游戏串流服务器:从安装到首次串流的免费完整教程 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 周末刚过半,你想用手柄接着打书房电脑上的 3A 大…

作者头像 李华