ABAP核心进阶篇(120篇):类与对象基础概念(10篇)
第二篇:SE24类构建器实操:从0到1创建你的第一个全局类与对象实例
博客标题:《SE24类构建器实操:从0到1创建你的第一个全局类与对象实例》
博客简介 :结合SE24事务码的操作流程,分步演示全局类的创建、属性与基础方法定义、激活校验的全流程,讲解通过DATA语句实例化对象、调用类方法的基础语法,零基础也能完成第一个OOP程序的开发运行。
📖 写在前面
在了解了类和对象的核心概念后,接下来就是实际动手创建和使用类。
在ABAP中,创建类主要有两种方式:
| 创建方式 |
说明 |
适用场景 |
| 局部类(Local Class) |
定义在程序内部,只能在当前程序中使用 |
单程序专用、快速原型 |
| 全局类(Global Class) |
定义在数据字典中,可以被所有程序使用 |
跨程序复用(推荐) |
全局类是ABAP OOP开发中最常用的方式,因为它可以被多个程序复用。创建全局类需要使用SE24事务码(类构建器)。
本文将结合SE24事务码的操作流程,分步演示 全局类的创建、属性与基础方法定义、激活校验的全流程,讲解通过DATA语句实例化对象、调用类方法的基础语法,帮助零基础的读者完成第一个OOP程序的开发运行。
一、SE24类构建器简介
1.1 什么是SE24?
SE24是SAP系统中用于创建和维护全局类的事务码,称为"类构建器"(Class Builder)。
SE24的核心功能:
| 功能 |
说明 |
| ✅ 创建全局类 |
从零开始创建新的全局类 |
| ✅ 修改全局类 |
修改已有类的属性和方法 |
| ✅ 维护组件 |
管理类的属性、方法、事件、接口 |
| ✅ 激活类 |
使类生效,可供其他程序使用 |
| ✅ 测试类 |
在SE24中直接测试类的方法 |
1.2 SE24界面结构
┌──────────────────────────────────────────────────────────────────┐
│ 📦 SE24 类构建器 │
├──────────────────────────────────────────────────────────────────┤
│ 📝 类名称输入框 │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 类名称: [ ZCL_MM_ORDER ] │ │
│ └──────────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────────────┤
│ 🔧 工具栏 │
│ [创建] [修改] [显示] [激活] │ [定义视图] [实现视图] │ [测试] │
├──────────────────────────────────────────────────────────────────┤
│ 📊 导航面板 │ 📄 主工作区 │
│ ├── 属性(Attributes) │ ┌──────────────────────────────┐ │
│ ├── 方法(Methods) │ │ 属性/方法定义或实现代码 │ │
│ ├── 事件(Events) │ │ │ │
│ ├── 接口(Interfaces) │ │ │ │
│ └── 友元(Friends) │ └──────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
两个核心视图:
| 视图 |
作用 |
操作内容 |
| 定义视图(Definition) |
定义类的结构 |
添加属性、方法、事件、接口 |
| 实现视图(Implementation) |
实现类的代码 |
编写方法的实现逻辑 |
1.3 全局类命名规范
| 规则 |
说明 |
✅ 正确示例 |
❌ 错误示例 |
| 前缀 |
以 ZCL_ 开头 |
ZCL_MM_ORDER |
MM_ORDER |
| 模块缩写 |
标识所属模块 |
ZCL_MM_ORDER(物料管理) |
ZCL_ORDER |
| 语义清晰 |
反映类的功能 |
ZCL_MM_ORDER(订单处理) |
ZCL_CLASS1 |
| 长度 |
不超过30个字符 |
ZCL_MM_ORDER |
ZCL_MM_PURCHASE_ORDER |
二、创建全局类的完整步骤
2.1 步骤1:进入SE24
📌 操作步骤:
1️⃣ 在SAP GUI命令栏输入事务码:SE24
2️⃣ 按回车键进入类构建器
2.2 步骤2:输入类名称
📌 操作步骤:
1️⃣ 在"类名称"输入框中输入:ZCL_MM_ORDER
2️⃣ 点击"创建"按钮
| 注意事项 |
说明 |
| 命名格式 |
必须以 ZCL_ 开头(自定义全局类) |
| 唯一性 |
类名称必须唯一,不能与现有类重名 |
| 语义清晰 |
名称应反映类的功能和用途 |
2.3 步骤3:选择类类型
📌 操作步骤:
1️⃣ 在弹出的"类类型"对话框中选择类类型
2️⃣ 默认选择"全局类"(Global Class)
3️⃣ 点击"确定"按钮
| 类类型 |
说明 |
能否实例化 |
能否被继承 |
| 全局类(Global Class) |
标准类,可被所有程序使用 |
✅ 是 |
✅ 是 |
| 抽象类(Abstract Class) |
包含抽象方法,不能直接实例化 |
❌ 否 |
✅ 是 |
| 最终类(Final Class) |
不能被继承的类 |
✅ 是 |
❌ 否 |
| 接口(Interface) |
只定义方法签名,不含实现 |
❌ 否 |
❌ 否 |
2.4 步骤4:输入类描述
📌 操作步骤:
1️⃣ 在"短描述"输入框中输入类的描述
2️⃣ 点击"保存"按钮
示例输入:
- 短描述:采购订单处理类
- 长描述(可选):用于处理采购订单的创建、修改、删除和查询操作
2.5 步骤5:维护类属性
📌 属性定义界面
📌 操作步骤:
1️⃣ 在导航面板中点击"属性"(Attributes)
2️⃣ 在主工作区中添加属性
3️⃣ 填写属性的名称、类型、可见性等信息
📌 添加属性示例
| 属性名称 |
类型 |
可见性 |
实例/静态 |
只读 |
说明 |
order_id |
EBELN |
PUBLIC |
实例 |
✅ 是 |
订单号 |
vendor_id |
LIFNR |
PUBLIC |
实例 |
❌ 否 |
供应商号 |
amount |
NETWR |
PUBLIC |
实例 |
❌ 否 |
订单金额 |
status |
CHAR2 |
PUBLIC |
实例 |
❌ 否 |
订单状态 |
📌 操作步骤详解
📌 详细操作:
步骤1:点击"插入行"按钮
步骤2:输入属性名称:order_id
步骤3:输入类型:EBELN
步骤4:选择可见性:PUBLIC
步骤5:勾选"只读"选项(表示该属性不可修改)
步骤6:点击"激活"按钮保存
🔄 重复上述步骤添加其他属性:
- vendor_id(LIFNR,PUBLIC)
- amount(NETWR,PUBLIC)
- status(CHAR2,PUBLIC)
📌 属性可见性说明
| 可见性 |
访问范围 |
使用场景 |
PUBLIC |
所有代码均可访问 |
需要对外暴露的属性 |
PROTECTED |
类本身和子类可以访问 |
需要在继承链中共享的属性 |
PRIVATE |
只有类本身可以访问 |
内部状态属性(推荐) |
2.6 步骤6:维护类方法
📌 方法定义界面
📌 操作步骤:
1️⃣ 在导航面板中点击"方法"(Methods)
2️⃣ 在主工作区中添加方法
3️⃣ 填写方法的名称、可见性、参数等信息
📌 添加方法示例
| 方法名称 |
可见性 |
参数 |
说明 |
constructor |
PUBLIC |
IV_ORDER_ID(EBELN) IV_VENDOR_ID(LIFNR) |
构造函数 |
create_order |
PUBLIC |
无 |
创建订单 |
modify_order |
PUBLIC |
IV_AMOUNT(NETWR) |
修改订单金额 |
delete_order |
PUBLIC |
无 |
删除订单 |
get_order |
PUBLIC |
ES_ORDER(ZMM_ORDER) |
查询订单 |
📌 方法参数传递方式
| 参数类型 |
关键字 |
说明 |
使用场景 |
| 输入参数 |
IMPORTING |
方法接收的数据 |
最常用,用于传递数据给方法 |
| 输出参数 |
EXPORTING |
方法返回的数据 |
返回多个值时使用 |
| 输入输出参数 |
CHANGING |
方法可以修改的数据 |
需要修改外部变量时 |
| 返回值 |
RETURNING |
方法的单个返回值 |
返回单个值时使用(推荐) |
2.7 步骤7:实现类方法
📌 完整实现代码
CLASS zcl_mm_order IMPLEMENTATION.
" ================================================================
" 构造函数:初始化订单对象
" ================================================================
METHOD constructor.
order_id = iv_order_id.
vendor_id = iv_vendor_id.
status = '01'. " 默认状态:已创建
ENDMETHOD.
" ================================================================
" 创建订单
" ================================================================
METHOD create_order.
" 验证订单数据
IF vendor_id IS INITIAL.
MESSAGE '供应商不能为空' TYPE 'E'.
RETURN.
ENDIF.
IF amount <= 0.
MESSAGE '金额必须大于0' TYPE 'E'.
RETURN.
ENDIF.
" 保存到数据库
INSERT INTO zmm_order VALUES( mandt = sy-mandt
ebeln = order_id
lifnr = vendor_id
netwr = amount
status = status ).
IF sy-subrc = 0.
MESSAGE '✅ 订单创建成功' TYPE 'S'.
ELSE.
MESSAGE '❌ 订单创建失败' TYPE 'E'.
ENDIF.
ENDMETHOD.
" ================================================================
" 修改订单金额
" ================================================================
METHOD modify_order.
" 更新金额
amount = iv_amount.
" 更新数据库
UPDATE zmm_order SET netwr = amount
WHERE mandt = sy-mandt
AND ebeln = order_id.
IF sy-subrc = 0.
MESSAGE '✅ 订单修改成功' TYPE 'S'.
ELSE.
MESSAGE '❌ 订单修改失败' TYPE 'E'.
ENDIF.
ENDMETHOD.
" ================================================================
" 删除订单
" ================================================================
METHOD delete_order.
DELETE FROM zmm_order
WHERE mandt = sy-mandt
AND ebeln = order_id.
IF sy-subrc = 0.
MESSAGE '✅ 订单删除成功' TYPE 'S'.
ELSE.
MESSAGE '❌ 订单删除失败' TYPE 'E'.
ENDIF.
ENDMETHOD.
" ================================================================
" 查询订单
" ================================================================
METHOD get_order.
SELECT SINGLE * INTO es_order
FROM zmm_order
WHERE mandt = sy-mandt
AND ebeln = order_id.
ENDMETHOD.
ENDCLASS.
2.8 步骤8:激活类
📌 激活步骤:
1️⃣ 点击工具栏中的"激活"按钮(或按 Ctrl+F3)
2️⃣ 如果有语法错误,系统会显示错误信息
3️⃣ 修复错误后重新激活
4️⃣ 激活成功后,类可以被其他程序使用
✅ 激活成功标志:
- 类名称旁边出现绿色激活图标
- 状态栏显示:"对象已激活"
常见激活错误及处理:
| 错误类型 |
错误信息 |
解决方案 |
| 方法未实现 |
"Method XX is not implemented" |
在实现视图中添加方法实现 |
| 参数不匹配 |
"Parameter XX type mismatch" |
确保参数类型与定义一致 |
| 语法错误 |
"Syntax error in line XX" |
使用 Ctrl+F2 检查语法并修复 |
| 未使用变量 |
"Variable XX is not used" |
删除未使用的变量或添加注释 |
三、使用全局类
3.1 声明对象引用变量
" ✅ 声明对象引用变量
DATA: lo_order TYPE REF TO zcl_mm_order.
" 📖 语法说明:
" DATA : 声明变量的关键字
" lo_order : 变量名称(lo_ 前缀表示对象引用)
" TYPE REF TO: 表示这是一个对象引用变量
" zcl_mm_order: 类名称
对象引用变量命名规范:
| 规则 |
说明 |
✅ 正确示例 |
❌ 错误示例 |
| 前缀 |
使用 lo_ 前缀 |
lo_order |
order |
| 语义清晰 |
反映对象的含义 |
lo_purchase_order |
lo_obj |
| 下划线分隔 |
使用下划线分隔单词 |
lo_order_header |
loorderheader |
3.2 创建对象实例
📌 方式一:CREATE OBJECT(传统方式)
" 使用 CREATE OBJECT 创建对象
CREATE OBJECT lo_order
EXPORTING
iv_order_id = '4500000001'
iv_vendor_id = '10000001'.
" 📖 说明:
" CREATE OBJECT : 创建对象的关键字
" lo_order : 对象引用变量名称
" EXPORTING : 传递参数给构造函数
" iv_order_id : 构造函数的输入参数
📌 方式二:NEW 语法(ABAP 7.40+,推荐)
" 使用 NEW 创建对象(ABAP 7.40+)
lo_order = NEW zcl_mm_order(
iv_order_id = '4500000001'
iv_vendor_id = '10000001' ).
" 📖 说明:
" NEW : 创建对象的关键字
" zcl_mm_order: 类名称
" 括号内 : 传递构造函数参数
📌 两种方式对比
| 方式 |
语法 |
适用版本 |
推荐度 |
| CREATE OBJECT |
CREATE OBJECT lo_order EXPORTING ... |
所有版本 |
⭐⭐⭐ |
| NEW |
lo_order = NEW class( ... ) |
ABAP 7.40+ |
⭐⭐⭐⭐⭐ |
3.3 访问对象属性
" 📖 访问对象属性(使用 -> 符号)
WRITE: / '订单号:', lo_order->order_id.
WRITE: / '供应商:', lo_order->vendor_id.
WRITE: / '金额:', lo_order->amount.
WRITE: / '状态:', lo_order->status.
" ✏️ 修改非只读属性
lo_order->vendor_id = '10000002'.
lo_order->amount = 15000.00.
lo_order->status = '02'.
访问属性注意事项:
| 注意事项 |
说明 |
| 可见性限制 |
只能访问 PUBLIC 属性,PRIVATE/PROTECTED 不可外部访问 |
| 只读限制 |
只读属性(READ-ONLY)只能读取,不能修改 |
| 必须先实例化 |
对象未实例化时访问属性会导致运行时错误 |
| 空对象检查 |
访问前应检查对象是否为空(IS NOT INITIAL) |
3.4 调用对象方法
📌 调用无参数方法
" ✅ 调用无参数方法
lo_order->create_order( ).
lo_order->delete_order( ).
" 📖 说明:
" -> : 方法调用操作符
" create_order : 方法名称
" ( ) : 方法调用括号
📌 调用有参数方法
" ✅ 调用有参数方法
lo_order->modify_order(
EXPORTING
iv_amount = 15000.00 ).
" ✅ 调用有返回值方法
DATA: ls_order TYPE zmm_order.
lo_order->get_order(
IMPORTING
es_order = ls_order ).
📌 简化语法(ABAP 7.40+)
" ✅ 简化语法(单个参数)
lo_order->modify_order( iv_amount = 15000.00 ).
" ✅ 简化语法(返回值直接赋值)
DATA(ls_order) = lo_order->get_order( ).
调用方法注意事项:
| 注意事项 |
说明 |
| 可见性限制 |
只能调用 PUBLIC 方法 |
| 参数匹配 |
参数名称和类型必须与方法定义一致 |
| 必须先实例化 |
对象未实例化时调用方法会导致运行时错误 |
| 空对象检查 |
调用前应检查对象是否为空(IS NOT INITIAL) |
3.5 销毁对象
" ✅ 方式一:使用 FREE 销毁对象
FREE lo_order.
" ✅ 方式二:使用 CLEAR 清空引用
CLEAR lo_order.
FREE vs CLEAR 区别:
| 语句 |
作用 |
对象状态 |
内存释放 |
| FREE |
立即销毁对象 |
对象被立即销毁 |
✅ 立即释放 |
| CLEAR |
仅清空引用变量 |
对象可能仍存在 |
⚠️ 由垃圾回收器处理 |
四、完整示例:创建并使用订单类
4.1 创建全局类(步骤汇总)
📋 创建步骤汇总:
步骤1️⃣:SE24 → 输入类名称:ZCL_MM_ORDER
步骤2️⃣:选择类类型:全局类
步骤3️⃣:输入描述:采购订单处理类
步骤4️⃣:添加属性 → order_id, vendor_id, amount, status
步骤5️⃣:添加方法 → constructor, create_order, modify_order,
delete_order, get_order
步骤6️⃣:实现方法 → 编写各方法的实现代码
步骤7️⃣:激活类 → 检查并修复错误
4.2 测试程序代码
REPORT zmm_test_order_class.
START-OF-SELECTION.
DATA: lo_order TYPE REF TO zcl_mm_order,
ls_order TYPE zmm_order.
" ================================================================
" 1️⃣ 创建订单对象
" ================================================================
CREATE OBJECT lo_order
EXPORTING
iv_order_id = '4500000001'
iv_vendor_id = '10000001'.
" 设置订单金额
lo_order->amount = 10000.00.
" ================================================================
" 2️⃣ 创建订单
" ================================================================
lo_order->create_order( ).
" ================================================================
" 3️⃣ 显示订单信息
" ================================================================
WRITE: / '📋 订单信息:'.
WRITE: / ' 订单号 :', lo_order->order_id.
WRITE: / ' 供应商 :', lo_order->vendor_id.
WRITE: / ' 金额 :', lo_order->amount.
WRITE: / ' 状态 :', lo_order->status.
" ================================================================
" 4️⃣ 修改订单金额
" ================================================================
lo_order->modify_order( iv_amount = 15000.00 ).
" ================================================================
" 5️⃣ 查询订单信息
" ================================================================
lo_order->get_order( IMPORTING es_order = ls_order ).
WRITE: / '📋 查询订单金额:', ls_order-netwr.
" ================================================================
" 6️⃣ 销毁对象
" ================================================================
FREE lo_order.
4.3 预期运行结果
📋 订单信息:
订单号 : 4500000001
供应商 : 10000001
金额 : 10000.00
状态 : 01
✅ 订单创建成功
✅ 订单修改成功
📋 查询订单金额: 15000.00
五、常见问题与排查
5.1 问题一:类创建后无法激活
| 项目 |
内容 |
| 错误信息 |
"Syntax error in class ZCL_MM_ORDER" 或 "Method CREATE_ORDER is not implemented" |
| 可能原因 |
方法未实现、语法错误、参数不匹配 |
| 解决方案 |
检查所有方法是否已实现;使用 Ctrl+F2 检查语法;确保参数定义与实现一致 |
5.2 问题二:无法访问对象属性或方法
| 项目 |
内容 |
| 错误信息 |
"Attribute ORDER_ID is not visible" 或 "Method CREATE_ORDER is not visible" |
| 可能原因 |
属性/方法可见性为 PRIVATE 或 PROTECTED;名称拼写错误;类未激活 |
| 解决方案 |
将可见性改为 PUBLIC;修正拼写错误;在SE24中重新激活类 |
5.3 问题三:对象未实例化导致运行时错误
| 项目 |
内容 |
| 错误信息 |
"Access to a null object reference" |
| 可能原因 |
未创建对象实例;对象已被销毁;对象创建失败 |
| 解决方案 |
确保在访问前执行 CREATE OBJECT;使用 IS NOT INITIAL 检查对象是否存在 |
5.4 问题四:构造函数参数传递错误
| 项目 |
内容 |
| 错误信息 |
"Parameter IV_ORDER_ID is missing" 或 "Parameter type mismatch" |
| 可能原因 |
缺少必需参数;参数类型不匹配;参数名称错误 |
| 解决方案 |
检查构造函数定义,确保传递所有必需参数;确保参数类型一致 |
六、最佳实践与规范
6.1 类设计规范
| 规范 |
说明 |
| 单一职责 |
一个类只负责一个功能领域 |
| 高内聚 |
属性和方法应紧密相关 |
| 低耦合 |
类之间的依赖关系尽量少 |
| 接口清晰 |
公开的属性和方法应清晰易懂 |
6.2 属性设计规范
| 规范 |
说明 |
| 最小公开 |
尽量使用 PRIVATE 或 PROTECTED 属性 |
| 只读属性 |
不需要外部修改的属性设置为只读 |
| 类型匹配 |
属性类型应与数据库字段类型一致 |
6.3 方法设计规范
| 规范 |
说明 |
| 单一职责 |
一个方法只做一件事 |
| 参数清晰 |
参数名称应清晰表达含义(使用 IV_ 前缀) |
| 异常处理 |
在方法中处理可能的异常 |
| 文档注释 |
为方法添加注释说明功能 |
七、总结
7.1 创建全局类步骤回顾
#mermaid-svg-ls1Aibgqj8aSkvyC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ls1Aibgqj8aSkvyC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ls1Aibgqj8aSkvyC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ls1Aibgqj8aSkvyC .error-icon{fill:#552222;}#mermaid-svg-ls1Aibgqj8aSkvyC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ls1Aibgqj8aSkvyC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ls1Aibgqj8aSkvyC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ls1Aibgqj8aSkvyC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ls1Aibgqj8aSkvyC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ls1Aibgqj8aSkvyC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ls1Aibgqj8aSkvyC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ls1Aibgqj8aSkvyC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ls1Aibgqj8aSkvyC .marker.cross{stroke:#333333;}#mermaid-svg-ls1Aibgqj8aSkvyC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ls1Aibgqj8aSkvyC p{margin:0;}#mermaid-svg-ls1Aibgqj8aSkvyC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ls1Aibgqj8aSkvyC .cluster-label text{fill:#333;}#mermaid-svg-ls1Aibgqj8aSkvyC .cluster-label span{color:#333;}#mermaid-svg-ls1Aibgqj8aSkvyC .cluster-label span p{background-color:transparent;}#mermaid-svg-ls1Aibgqj8aSkvyC .label text,#mermaid-svg-ls1Aibgqj8aSkvyC span{fill:#333;color:#333;}#mermaid-svg-ls1Aibgqj8aSkvyC .node rect,#mermaid-svg-ls1Aibgqj8aSkvyC .node circle,#mermaid-svg-ls1Aibgqj8aSkvyC .node ellipse,#mermaid-svg-ls1Aibgqj8aSkvyC .node polygon,#mermaid-svg-ls1Aibgqj8aSkvyC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ls1Aibgqj8aSkvyC .rough-node .label text,#mermaid-svg-ls1Aibgqj8aSkvyC .node .label text,#mermaid-svg-ls1Aibgqj8aSkvyC .image-shape .label,#mermaid-svg-ls1Aibgqj8aSkvyC .icon-shape .label{text-anchor:middle;}#mermaid-svg-ls1Aibgqj8aSkvyC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ls1Aibgqj8aSkvyC .rough-node .label,#mermaid-svg-ls1Aibgqj8aSkvyC .node .label,#mermaid-svg-ls1Aibgqj8aSkvyC .image-shape .label,#mermaid-svg-ls1Aibgqj8aSkvyC .icon-shape .label{text-align:center;}#mermaid-svg-ls1Aibgqj8aSkvyC .node.clickable{cursor:pointer;}#mermaid-svg-ls1Aibgqj8aSkvyC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ls1Aibgqj8aSkvyC .arrowheadPath{fill:#333333;}#mermaid-svg-ls1Aibgqj8aSkvyC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ls1Aibgqj8aSkvyC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ls1Aibgqj8aSkvyC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ls1Aibgqj8aSkvyC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ls1Aibgqj8aSkvyC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ls1Aibgqj8aSkvyC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ls1Aibgqj8aSkvyC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ls1Aibgqj8aSkvyC .cluster text{fill:#333;}#mermaid-svg-ls1Aibgqj8aSkvyC .cluster span{color:#333;}#mermaid-svg-ls1Aibgqj8aSkvyC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ls1Aibgqj8aSkvyC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ls1Aibgqj8aSkvyC rect.text{fill:none;stroke-width:0;}#mermaid-svg-ls1Aibgqj8aSkvyC .icon-shape,#mermaid-svg-ls1Aibgqj8aSkvyC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ls1Aibgqj8aSkvyC .icon-shape p,#mermaid-svg-ls1Aibgqj8aSkvyC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ls1Aibgqj8aSkvyC .icon-shape .label rect,#mermaid-svg-ls1Aibgqj8aSkvyC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ls1Aibgqj8aSkvyC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ls1Aibgqj8aSkvyC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ls1Aibgqj8aSkvyC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. SE24
2. 输入类名
3. 选择类型
4. 输入描述
5. 添加属性
6. 添加方法
7. 实现方法
8. 激活类
7.2 使用全局类步骤回顾
#mermaid-svg-61oA7PAoGnLT0N4s{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-61oA7PAoGnLT0N4s .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-61oA7PAoGnLT0N4s .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-61oA7PAoGnLT0N4s .error-icon{fill:#552222;}#mermaid-svg-61oA7PAoGnLT0N4s .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-61oA7PAoGnLT0N4s .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-61oA7PAoGnLT0N4s .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-61oA7PAoGnLT0N4s .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-61oA7PAoGnLT0N4s .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-61oA7PAoGnLT0N4s .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-61oA7PAoGnLT0N4s .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-61oA7PAoGnLT0N4s .marker{fill:#333333;stroke:#333333;}#mermaid-svg-61oA7PAoGnLT0N4s .marker.cross{stroke:#333333;}#mermaid-svg-61oA7PAoGnLT0N4s svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-61oA7PAoGnLT0N4s p{margin:0;}#mermaid-svg-61oA7PAoGnLT0N4s .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-61oA7PAoGnLT0N4s .cluster-label text{fill:#333;}#mermaid-svg-61oA7PAoGnLT0N4s .cluster-label span{color:#333;}#mermaid-svg-61oA7PAoGnLT0N4s .cluster-label span p{background-color:transparent;}#mermaid-svg-61oA7PAoGnLT0N4s .label text,#mermaid-svg-61oA7PAoGnLT0N4s span{fill:#333;color:#333;}#mermaid-svg-61oA7PAoGnLT0N4s .node rect,#mermaid-svg-61oA7PAoGnLT0N4s .node circle,#mermaid-svg-61oA7PAoGnLT0N4s .node ellipse,#mermaid-svg-61oA7PAoGnLT0N4s .node polygon,#mermaid-svg-61oA7PAoGnLT0N4s .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-61oA7PAoGnLT0N4s .rough-node .label text,#mermaid-svg-61oA7PAoGnLT0N4s .node .label text,#mermaid-svg-61oA7PAoGnLT0N4s .image-shape .label,#mermaid-svg-61oA7PAoGnLT0N4s .icon-shape .label{text-anchor:middle;}#mermaid-svg-61oA7PAoGnLT0N4s .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-61oA7PAoGnLT0N4s .rough-node .label,#mermaid-svg-61oA7PAoGnLT0N4s .node .label,#mermaid-svg-61oA7PAoGnLT0N4s .image-shape .label,#mermaid-svg-61oA7PAoGnLT0N4s .icon-shape .label{text-align:center;}#mermaid-svg-61oA7PAoGnLT0N4s .node.clickable{cursor:pointer;}#mermaid-svg-61oA7PAoGnLT0N4s .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-61oA7PAoGnLT0N4s .arrowheadPath{fill:#333333;}#mermaid-svg-61oA7PAoGnLT0N4s .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-61oA7PAoGnLT0N4s .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-61oA7PAoGnLT0N4s .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-61oA7PAoGnLT0N4s .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-61oA7PAoGnLT0N4s .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-61oA7PAoGnLT0N4s .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-61oA7PAoGnLT0N4s .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-61oA7PAoGnLT0N4s .cluster text{fill:#333;}#mermaid-svg-61oA7PAoGnLT0N4s .cluster span{color:#333;}#mermaid-svg-61oA7PAoGnLT0N4s div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-61oA7PAoGnLT0N4s .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-61oA7PAoGnLT0N4s rect.text{fill:none;stroke-width:0;}#mermaid-svg-61oA7PAoGnLT0N4s .icon-shape,#mermaid-svg-61oA7PAoGnLT0N4s .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-61oA7PAoGnLT0N4s .icon-shape p,#mermaid-svg-61oA7PAoGnLT0N4s .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-61oA7PAoGnLT0N4s .icon-shape .label rect,#mermaid-svg-61oA7PAoGnLT0N4s .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-61oA7PAoGnLT0N4s .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-61oA7PAoGnLT0N4s .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-61oA7PAoGnLT0N4s :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 声明引用
2. 创建实例
3. 访问属性
4. 调用方法
5. 销毁对象
7.3 核心要点
| 类别 |
核心要点 |
| 创建类 |
① SE24是标准工具 ② 定义+实现两部分 ③ 激活后可用 |
| 使用类 |
① 先声明变量 ② 先实例化后使用 ③ 用 -> 访问 ④ 用 FREE 销毁 |
| 命名规范 |
类用 ZCL_ 前缀,对象引用用 lo_ 前缀,输入参数用 IV_ 前缀 |
下一篇预告:《类的成员属性详解:实例属性/静态属性/常量的适用场景与声明规则》
作者 :爱喝水的鱼丶
版本记录:2026年6月
💬 你在创建全局类时遇到过哪些问题?欢迎在评论区分享你的经验!