SAP-ABAP:SE24类构建器实操:从0到1创建你的第一个全局类与对象实例


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_IDEBELNIV_VENDOR_IDLIFNR 构造函数
create_order PUBLIC 创建订单
modify_order PUBLIC IV_AMOUNTNETWR 修改订单金额
delete_order PUBLIC 删除订单
get_order PUBLIC ES_ORDERZMM_ORDER 查询订单
📌 方法参数传递方式
参数类型 关键字 说明 使用场景
输入参数 IMPORTING 方法接收的数据 最常用,用于传递数据给方法
输出参数 EXPORTING 方法返回的数据 返回多个值时使用
输入输出参数 CHANGING 方法可以修改的数据 需要修改外部变量时
返回值 RETURNING 方法的单个返回值 返回单个值时使用(推荐)

2.7 步骤7:实现类方法

📌 完整实现代码
abap 复制代码
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 声明对象引用变量

abap 复制代码
" ✅ 声明对象引用变量
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(传统方式)
abap 复制代码
" 使用 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+,推荐)
abap 复制代码
" 使用 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 访问对象属性

abap 复制代码
" 📖 访问对象属性(使用 -> 符号)
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 调用对象方法

📌 调用无参数方法
abap 复制代码
" ✅ 调用无参数方法
lo_order->create_order( ).
lo_order->delete_order( ).

" 📖 说明:
"   ->            : 方法调用操作符
"   create_order  : 方法名称
"   ( )           : 方法调用括号
📌 调用有参数方法
abap 复制代码
" ✅ 调用有参数方法
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+)
abap 复制代码
" ✅ 简化语法(单个参数)
lo_order->modify_order( iv_amount = 15000.00 ).

" ✅ 简化语法(返回值直接赋值)
DATA(ls_order) = lo_order->get_order( ).

调用方法注意事项

注意事项 说明
可见性限制 只能调用 PUBLIC 方法
参数匹配 参数名称和类型必须与方法定义一致
必须先实例化 对象未实例化时调用方法会导致运行时错误
空对象检查 调用前应检查对象是否为空(IS NOT INITIAL

3.5 销毁对象

abap 复制代码
" ✅ 方式一:使用 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 测试程序代码

abap 复制代码
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"
可能原因 属性/方法可见性为 PRIVATEPROTECTED;名称拼写错误;类未激活
解决方案 将可见性改为 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 属性设计规范

规范 说明
最小公开 尽量使用 PRIVATEPROTECTED 属性
只读属性 不需要外部修改的属性设置为只读
类型匹配 属性类型应与数据库字段类型一致

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月

💬 你在创建全局类时遇到过哪些问题?欢迎在评论区分享你的经验!