ABAP 创建类的实例
原文链接:Creating Instances Of A Class
创建实例
您可以使用属性,例如相同类型的普通变量。但是,在类之外,属性名称不足以明确标识属性。若要寻址类外部的静态属性,请先键入类名,然后键入静态组件选择器 ( =>
),然后键入属性名称。静态组件选择器是由等号和大于号组成的双箭头。
例如属性,情况更加复杂:为了访问实例组件,您需要一个引用变量。
引用变量是一种特殊类型的变量,用于创建、寻址和管理对象。引用变量用于指向程序内存中类的实例。使用 DATA 语句声明引用变量,并添加 TYPE REF TO,后跟类的名称。
引用变量的初始值称为 NULL 引用;参考尚未指向任何地方。
若要创建类的新实例,请使用 NEW 运算符。上面的示例在值赋值的右侧使用 NEW #( ) 表达式。表达式的结果是新创建的实例的内存地址。然后,此引用将存储在赋值左侧的引用变量中。
您可能已经注意到,要实例化的类的名称不会出现在表达式中的任何位置。但是,从 NEW #( ) 表达式的位置,系统已经知道目标变量连接的类型为 REF TO lcl_connection,因此它知道它应该创建类lcl_connection的实例。NEW 运算符后面的井号表示“在等号之前使用变量的类型”。(在更高级的方案中,您实际上可以指定类的名称来代替井号)。
首次寻址类时(可能是访问静态组件或创建类的实例),运行时系统还会将类定义加载到程序内存中。此类定义包含所有静态属性,这些属性在类中仅存在一次,而不是每个实例存在一次。
您可以使用类名和静态组件选择器对静态组件进行寻址。这不适用于实例组件,因为您必须指定要访问的实例。
要寻址类外部的实例属性,请先键入引用变量,然后键入实例组件选择器 (->),然后键入属性名称。实例组件选择器是由短划线和大于号组成的箭头。
如果将一个引用变量分配给另一个引用变量,系统会将第一个变量指向的对象的地址复制到第二个引用变量中。这样做的结果是,您有两个指向同一对象的引用变量
面向对象编程的主要特征之一是可以创建同一类的多个实例。每个实例都在程序内存中的不同位置创建,一个实例中的实例属性值独立于其他实例中的值。但如图所示,同一类的实例共享静态属性的值。
可以使用同一引用变量创建类的多个实例。每次使用 NEW # ( )
表达式时,系统都会创建类的新实例,并将新实例的地址放入引用变量中。但是,新实例的地址会覆盖前一个实例的地址。
在上面的示例中,lcl_connection2
的地址将覆盖 lcl_connection1
的地址。因此,程序中不再有指向 lcl_connection1
的引用变量。当这种情况发生在实例上时,无法再从程序中解决。
为了防止程序内存被无法再寻址的对象填满并最终溢出,运行时系统有一个名为垃圾回收器的组件。垃圾回收器是一个定期运行的程序,用于查找和销毁不再引用指向的对象。如果在程序期间通过覆盖或使用 CLEAR
语句删除对对象的最后一个引用,则垃圾回收器将在下一次传递时销毁该对象。
- 点赞
- 收藏
- 关注作者
评论(0)