ABAP 创建类的实例

举报
雨绸缪 发表于 2023/05/29 16:51:17 2023/05/29
【摘要】 原文链接:Creating Instances Of A Class 创建实例您可以使用属性,例如相同类型的普通变量。但是,在类之外,属性名称不足以明确标识属性。若要寻址类外部的静态属性,请先键入类名,然后键入静态组件选择器 ( => ),然后键入属性名称。静态组件选择器是由等号和大于号组成的双箭头。例如属性,情况更加复杂:为了访问实例组件,您需要一个引用变量。引用变量是一种特殊类型的变量,...

原文链接:Creating Instances Of A Class

创建实例

您可以使用属性,例如相同类型的普通变量。但是,在类之外,属性名称不足以明确标识属性。若要寻址类外部的静态属性,请先键入类名,然后键入静态组件选择器 ( => ),然后键入属性名称。静态组件选择器是由等号和大于号组成的双箭头。

01_-_Create_instances_001.png

例如属性,情况更加复杂:为了访问实例组件,您需要一个引用变量。

01_-_Create_instances_002.png

引用变量是一种特殊类型的变量,用于创建、寻址和管理对象。引用变量用于指向程序内存中类的实例。使用 DATA 语句声明引用变量,并添加 TYPE REF TO,后跟类的名称。

引用变量的初始值称为 NULL 引用;参考尚未指向任何地方。

若要创建类的新实例,请使用 NEW 运算符。上面的示例在值赋值的右侧使用 NEW #( ) 表达式。表达式的结果是新创建的实例的内存地址。然后,此引用将存储在赋值左侧的引用变量中。

01_-_Create_instances_003.png

您可能已经注意到,要实例化的类的名称不会出现在表达式中的任何位置。但是,从 NEW #( ) 表达式的位置,系统已经知道目标变量连接的类型为 REF TO lcl_connection,因此它知道它应该创建类lcl_connection的实例。NEW 运算符后面的井号表示“在等号之前使用变量的类型”。(在更高级的方案中,您实际上可以指定类的名称来代替井号)。

首次寻址类时(可能是访问静态组件或创建类的实例),运行时系统还会将类定义加载到程序内存中。此类定义包含所有静态属性,这些属性在类中仅存在一次,而不是每个实例存在一次。

01_-_Create_instances_004.png

您可以使用类名和静态组件选择器对静态组件进行寻址。这不适用于实例组件,因为您必须指定要访问的实例。

要寻址类外部的实例属性,请先键入引用变量,然后键入实例组件选择器 (->),然后键入属性名称。实例组件选择器是由短划线和大于号组成的箭头。

01_-_Create_instances_005.png

如果将一个引用变量分配给另一个引用变量,系统会将第一个变量指向的对象的地址复制到第二个引用变量中。这样做的结果是,您有两个指向同一对象的引用变量

面向对象编程的主要特征之一是可以创建同一类的多个实例。每个实例都在程序内存中的不同位置创建,一个实例中的实例属性值独立于其他实例中的值。但如图所示,同一类的实例共享静态属性的值。

01_-_Create_instances_006.png

可以使用同一引用变量创建类的多个实例。每次使用 NEW # ( ) 表达式时,系统都会创建类的新实例,并将新实例的地址放入引用变量中。但是,新实例的地址会覆盖前一个实例的地址。

在上面的示例中,lcl_connection2 的地址将覆盖 lcl_connection1 的地址。因此,程序中不再有指向 lcl_connection1 的引用变量。当这种情况发生在实例上时,无法再从程序中解决。

为了防止程序内存被无法再寻址的对象填满并最终溢出,运行时系统有一个名为垃圾回收器的组件。垃圾回收器是一个定期运行的程序,用于查找和销毁不再引用指向的对象。如果在程序期间通过覆盖或使用 CLEAR 语句删除对对象的最后一个引用,则垃圾回收器将在下一次传递时销毁该对象。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。