在调试模式下调试小代码的过程中,永远不会执行class_contructor
方法。但它应该被执行。我想知道为什么!
看看第67行和第70行之间的界限!
REPORT ZSAPBC401_BAS_S3.
TYPE-POOLS icon.
CLASS lcl_airplane DEFINITION.
PUBLIC SECTION.
METHODS:
CONSTRUCTOR
IMPORTING
iv_name TYPE string
iv_planetype TYPE saplane-planetype
EXCEPTIONS
wrong_planetype,
display_attributes.
CLASS-METHODS:
class_contructor,
display_n_o_airplanes,
get_n_o_airplanes
RETURNING value(rv_count) TYPE i.
PROTECTED SECTION.
CONSTANTS:
c_pos_1 TYPE i VALUE 30.
PRIVATE SECTION.
TYPES: ty_planetypes TYPE STANDARD TABLE OF SAPLANE WITH NON-UNIQUE KEY PLANETYPE.
DATA:
mv_name TYPE string,
mv_planetype TYPE saplane-planetype,
mv_weight TYPE saplane-weight,
mv_tankcap TYPE saplane-tankcap.
CLASS-DATA:
gv_n_o_airplanes TYPE i,
gt_planetypes TYPE ty_planetypes.
CLASS-METHODS:
get_technical_attributes
IMPORTING
iv_type TYPE saplane-planetype
EXPORTING
ev_weight TYPE saplane-weight
ev_tankcap TYPE saplane-tankcap
EXCEPTIONS
wrong_planetype.
ENDCLASS. "lcl_airplane DEFINITION
CLASS lcl_airplane IMPLEMENTATION.
METHOD CLASS_CONTRUCTOR.
Write: 'Hello! I was here'.
SELECT * FROM saplane INTO TABLE gt_planetypes.
ENDMETHOD.
METHOD constructor.
mv_name = iv_name.
mv_planetype = iv_planetype.
get_technical_attributes(
EXPORTING
iv_type = iv_planetype
IMPORTING
ev_weight = mv_weight
ev_tankcap = mv_tankcap
EXCEPTIONS
wrong_planetype = 1 ).
IF sy-subrc <> 0.
RAISE wrong_planetype.
ELSE.
gv_n_o_airplanes = gv_n_o_airplanes + 1.
ENDIF.
ENDMETHOD.
METHOD display_attributes.
WRITE:
/ icon_ws_plane AS ICON,
/ 'Name of Airplane'(001) , AT c_pos_1 mv_name,
/ 'Type of Airplane:'(002), AT c_pos_1 mv_planetype,
/ 'Weight:'(003), AT c_pos_1 mv_weight LEFT-JUSTIFIED,
/ 'Tank capacity:'(004), AT c_pos_1 mv_tankcap LEFT-JUSTIFIED.
ENDMETHOD.
METHOD display_n_o_airplanes.
SKIP.
WRITE:
/ 'Number of airplanes:'(ca1), AT c_pos_1 gv_n_o_airplanes LEFT-JUSTIFIED.
ENDMETHOD.
METHOD get_n_o_airplanes.
rv_count = gv_n_o_airplanes.
ENDMETHOD.
METHOD get_technical_attributes.
DATA: ls_planetype TYPE saplane.
* SELECT * FROM saplane INTO TABLE gt_planetypes.
READ TABLE gt_planetypes INTO ls_planetype WITH TABLE KEY planetype = iv_type TRANSPORTING weight tankcap.
IF sy-subrc = 0.
ev_weight = ls_planetype-weight.
ev_tankcap = ls_planetype-tankcap.
ELSE.
RAISE wrong_planetype.
ENDIF.
ENDMETHOD.
ENDCLASS. "lcl_airplane IMPLEMENTATION
DATA:
go_airplane TYPE REF TO lcl_airplane,
gt_airplanes TYPE TABLE OF REF TO lcl_airplane,
gv_count type i.
START-OF-SELECTION.
*******************
lcl_airplane=>display_n_o_airplanes( ).
CREATE OBJECT go_airplane
EXPORTING
iv_name = 'LH Berlin'
iv_planetype = 'A321'
EXCEPTIONS
wrong_planetype = 1.
IF sy-subrc = 0.
APPEND go_airplane TO gt_airplanes.
ENDIF.
CREATE OBJECT go_airplane
EXPORTING
iv_name = 'AA New York'
iv_planetype = '747-400'
EXCEPTIONS
wrong_planetype = 1.
IF sy-subrc = 0.
APPEND go_airplane TO gt_airplanes.
ENDIF.
CREATE OBJECT go_airplane
EXPORTING
iv_name = 'US Hercules'
iv_planetype = '747-200F'
EXCEPTIONS
wrong_planetype = 1.
IF sy-subrc = 0.
APPEND go_airplane TO gt_airplanes.
ENDIF.
LOOP AT gt_airplanes INTO go_airplane.
go_airplane->display_attributes( ).
ENDLOOP.
gv_count = lcl_airplane=>get_n_o_airplanes( ).
SKIP 2.
WRITE: / 'Number of airplanes'(ca1), gv_count.
答案 0 :(得分:5)
它不起作用,因为你写了class_contructor
而不是class_constructor
,至少这是你在附加的TXT中写的方式,我纠正了拼写错误,它运行正常。
答案 1 :(得分:1)
你的示例程序显示了许多糟糕的编程风格的例子 - 乍一看它看起来像OOP,但是使数据和方法静态变成了混乱。话虽这么说,你可能遇到了documented issue:
出于这个原因,可以在静态之前执行静态方法 构造函数已结束。
答案 2 :(得分:-1)
那是因为你永远不会调用它。你好像很困惑;你有2个名字非常相似的方法:
方法构造函数
和
CLASS-METHOD CLASS_CONTRUCTOR
在START-OF-SELECTION事件中,您在创建实例时调用LCL_AIRPLANE的构造函数:
CREATE OBJECT go_airplane
EXPORTING
iv_name = 'LH Berlin'
iv_planetype = 'A321'
EXCEPTIONS
wrong_planetype = 1.
IF sy-subrc = 0.
APPEND go_airplane TO gt_airplanes.
ENDIF.
但班级方法&#39; CLASS_CONTRUCTOR&#39;不会在您的代码中调用,如果您想这样做,您必须使用:
lcl_airplane=>CLASS_CONTRUCTOR( ).