==== 6.13.3 method_descriptor_info ==== The **method_descriptor_info** structure is used to describe a method defined in this package. This structure contains sufficient information to locate and parse the methods in the Method Component, while the Method Component does not. The items of the **method_descriptor_info** structure are as follows: **token** The ****token**** item represents the static method ****token**** ([[4.3.7.4_Static Methods and Constructors| Section 4.3.7.4, Static Methods and Constructors]]) or virtual method ****token**** ([[4.3.7.6_Virtual Methods| Section 4.3.7.6, Virtual Methods]]) or interface method ****token**** ([[4.3.7.7_Interface Methods| Section 4.3.7.7, Interface Methods]]) of this method. If this method is a private or package-visible static method, a private or package-visible constructor, or a private virtual method it does not have a ****token**** assigned. In this case the value of the ****token**** item must be **0xFF**. **access_flags** The ****access_flags**** item is a mask of modifiers used to describe the access permission to and properties of this method. The ****access_flags**** modifiers for methods are shown in the following table. Name Value **ACC_PUBLIC** **0x01** **ACC_PRIVATE** **0x02** **ACC_PROTECTED** **0x04** **ACC_STATIC** **0x08** **ACC_FINAL** **0x10** **ACC_ABSTRACT** **0x40** **ACC_INIT** **0x80** The method access and modifier flags defined in the table above, except the **ACC_INIT** flag, are a subset of those defined for methods in a Java ****class**** file. They have the same meaning, and are set under the same conditions, as the corresponding flags in a Java ****class**** file. The **ACC_INIT** flag is set if the method descriptor identifies a constructor methods. In Java a constructor method is recognized by its name, ****, but in Java Card systems, the name is replaced by a token. As in the Java verifier, these methods require special checks by the verifier for the Java Card platform ("Java Card verifier"). All other flag values are reserved. Their values must be zero. **method_offset** If the **class_descriptor_info** structure that contains this **method_descriptor_info** structure represents a class, the **method_offset** item represents a byte offset into the info item of the Method Component ([[6.9_Method Component| Section 6.9, Method Component]]). The element at that offset must be the beginning of a ****method_info**** structure. The ****method_info**** structure must represent this method. If the **class_descriptor_info** structure that contains this method_descriptor_info structure represents an interface, the value of the **method_offset** item must be zero. **type_offset** The **type_offset** item must be a valid offset into the **type_descriptor_info** structure. The type described at that offset represents the signature of this method. **bytecode_count** The **bytecode_count** item represents the number of bytecodes in this method. The value is equal to the length of the bytecodes array item in the **method_info** structure in the method component ([[6.9_Method Component| Section 6.9, Method Component]]) of this method. **exception_handler_count** The **exception_handler_count** item represents the number of exception handlers implemented by this method. **exception_handler_index** The **exception_handler_index** item represents the index to the first ****exception_handlers**** table entry in the method component ([[6.9_Method Component| Section 6.9, Method Component]]) implemented by this method. Succeeding ****exception_handlers**** table entries, up to the value of the **exception_handler_count** item, are also exception handlers implemented by this method. The value of the **exception_handler_index** item is 0 if the value of the **exception_handler_count** item is 0.