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_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:实现类方法

📌 完整实现代码
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"
可能原因 属性/方法可见性为 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月

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