Package Torello.Java.Additional
Class ConstantPool.Reference
- java.lang.Object
-
- Torello.Java.Additional.ConstantPool.Reference
-
- Enclosing class:
- ConstantPool
public static class ConstantPool.Reference extends java.lang.Object
A Data-Class which can represent:ConstantPool.TAG_FIELD_REF(9)ConstantPool.TAG_METHOD_REF(10)ConstantPool.TAG_INTERFACE_METHOD_REF(11)
Example Java Constant-Pool Table:
The following table was (partially) put together by none other than the illustrious Chat-GPT on December 17th, 2024. This table does not actually contain everything that can / does go into a typical Constant-Table, but rather only the constants which are pertinent to this example are included in this, example, table.
Admittedly, I ended up adding all kinds of stuff to the table, and changing around some of the text, but, when your brain isn't working so well, A.I. will help you tremendously come up with stuff. "Writer's Block" (starting at a blank screen) is a real phenomenon when programming.
Chat-GPT never ceases to amaze me.
Index Tag-Kind Tag-Kind Name Value 1 1 UTF8 `toString` 2 7 Class Index-Pointer: 10 → Points to [`UTF8`, "MyClass"] 3 12 NameAndType Index-Pointer: 1 → Points to [`UTF8`, "toString"]
Index-Pointer: 9 → Points to [`UTF8`, "()Ljava/lang/String;"]4 1 UTF8 `equals` 5 12 NameAndType Index-Pointer: 4 → Points to [`UTF8`, "equals"]
Index-Pointer: 8 → Points to [`UTF8`, "(Ljava/lang/Object;)Z"]6 7 Class Index-Pointer: 11 → Points to [`UTF8`, "java/lang/Object"] 7 10 MethodRef Index-Pointer: 2 → Points to a [`Class` Entry]
Index-Pointer: 3 → Points to a [`NameAndType` Entry]8 1 UTF8 `(Ljava/lang/Object;)Z` 9 1 UTF8 `()Ljava/lang/String;` 10 1 UTF8 `MyClass` 11 1 UTF8 `java/lang/Object` 12 9 MethodRef Index-Pointer: 6 → Points to a [`Class` Entry]
Index-Pointer: 5 → Points to a [`NameAndType` Entry]
Method-Reference Entries / Records:
Method-Reference for toString() is a Pointer-Pair located @ Table-Index 7:
- Index 2 →
Points to a [Class Entry], which is another Index-Pointer to →
- Index 10: which contains a [UTF-8 Entry] "MyClass"
- Index 3 →
Points to a [Name-And-Type Entry], which is another Pointer-Pair to →
- Index 1: (Name), which contains a [UTF-8 Entry] "toString"
- Index 9: (Type), which contains a [UTF-8 Entry] "()Ljava/lang/String;"
Method-Reference for equals() is a Pointer-Pair located @ Table-Index 12:
- Index 6 →
Points to a [Class Entry], which is another Index-Pointer to →
- Index 11: which contains a [UTF-8 Entry] "java/lang/Object"
- Index 5 →
Points to a [Name-And-Type Entry], which is another Pointer-Pair to →
- Index 4: (Name), which contains a [UTF-8 Entry] "equals"
- Index 8: (Type), which contains a [UTF-8 Entry] "(Ljava/lang/Object;)Z"
Instances of 'ConstantPool.Reference':
ConstantPool.Reference Field Assigned Value tag 10 ( TAG_METHOD_REF)tableIndex 7 name "toString" ownerClassName "MyClass" descriptor "()Ljava/lang/String;" descriptorUTF8Index 9 nameAndTypeIndex 3 nameUTF8Index 1 ownerClassIndex 2 ownerClassNameUTF8Index 10
ConstantPool.Reference Field Assigned Value tag 10 ( TAG_METHOD_REF)tableIndex 12 name "equals" ownerClassName "java/lang/Object" descriptor "(Ljava/lang/Object;)Z" descriptorUTF8Index 8 nameAndTypeIndex 5 nameUTF8Index 4 ownerClassIndex 6 ownerClassNameUTF8Index 11
Hi-Lited Source-Code:- View Here: Torello/Java/Additional/ConstantPool.java
- Open New Browser-Tab: Torello/Java/Additional/ConstantPool.java
File Size: 10,345 Bytes Line Count: 256 '\n' Characters Found
-
-
Field Summary
Either TAG_FIELD_REF (9) or TAG_METHOD_REF (10) or TAG_INTERFACE_METHOD_REF (11) Modifier and Type Field Description bytetagThe Constant-Pool Tg-Kind associated with this instance.Reference's Actual Table-Index in the Constant-Pool Modifier and Type Field Description inttableIndexThe Constant-Pool Table-Index where thisReferenceis locatedUTF-8 Name-String Reference Data Modifier and Type Field Description StringnameThis is just the name of the Method or Field.StringownerClassNameThe'className'field specifies in which class (where) the Method or Field has actuallly been defined.UTF-8 Method or Field Descriptor, as a String Modifier and Type Field Description StringdescriptorThis is the descriptor of a method or field, which is Java single-line description which includes type-information stored as a simpleString.Constant-Pool Table-Entry Indices Modifier and Type Field Description intdescriptorUTF8IndexConstant-Pool Table-Index identifying where theUTF-8Descriptor's Description-As-A-Stringis located.intnameAndTypeIndexAn intermediate Constant-Pool Index-Pair that points to a Name UTF-8 Constant, and a Type-Descriptor Constant.intnameUTF8IndexConstant-Pool Table-Index identifying where theUTF-8Method's or Field's Name-As-A-Stringis located.intownerClassIndexConstant-Pool Table-Index where owner'sclassName 'Class Constant'was storedintownerClassNameUTF8IndexConstant-Pool Table-Index identifying where theUTF-8Class' Name-As-A-Stringis located.
-
-
-
Field Detail
-
tableIndex
public final int tableIndex
The Constant-Pool Table-Index where thisReferenceis located
-
tag
public final byte tag
The Constant-Pool Tg-Kind associated with this instance. This Java'byte'may take only one of only three values:ConstantPool.TAG_FIELD_REF(9)ConstantPool.TAG_METHOD_REF(10)ConstantPool.TAG_INTERFACE_METHOD_REF(11)
The "Tag-Kind" for any Constant in a Java'.class'File's Constant-Pool are abyte-Value which occupies the first byte of the constant's definition in thebyte[]-Array which was loaded from disk.
-
ownerClassName
public final java.lang.String ownerClassName
The'className'field specifies in which class (where) the Method or Field has actuallly been defined. For most methods and fields, the'className'is the same as the actual class whose Constant-Pool was loaded into an instance ofConstantPool.
If the field or method reference is defined in an ancestor or parent class, then this field would contain the name of that ancestor.
-
ownerClassIndex
public final int ownerClassIndex
Constant-Pool Table-Index where owner'sclassName 'Class Constant'was stored
-
ownerClassNameUTF8Index
public final int ownerClassNameUTF8Index
Constant-Pool Table-Index identifying where theUTF-8Class' Name-As-A-Stringis located.
-
nameAndTypeIndex
public final int nameAndTypeIndex
An intermediate Constant-Pool Index-Pair that points to a Name UTF-8 Constant, and a Type-Descriptor Constant.
-
name
public final java.lang.String name
This is just the name of the Method or Field. Some common method names are (just for example) and'equals'. This particular Nested-Type has three fields of it's own, named:'className, 'name'and'descriptor'.
-
nameUTF8Index
public final int nameUTF8Index
Constant-Pool Table-Index identifying where theUTF-8Method's or Field's Name-As-A-Stringis located.
-
descriptor
public final java.lang.String descriptor
This is the descriptor of a method or field, which is Java single-line description which includes type-information stored as a simpleString. A descriptor is of the format:- For a method, the descriptor specifies the parameter types and return type.
- For a field, the descriptor specifies the field type.
-
descriptorUTF8Index
public final int descriptorUTF8Index
Constant-Pool Table-Index identifying where theUTF-8Descriptor's Description-As-A-Stringis located.
-
-
Method Detail
-
toString
public final java.lang.String toString()
Converts instance into ajava.lang.String.- Overrides:
toStringin classjava.lang.Object- Returns:
- The data-content of this record, as a
String, for printing. - Code:
- Exact Method Body:
return "Reference:\n" + "{\n" + " tag: " + tag + " - " + ConstantPool.tagNames.get(tag) + '\n' + " Table-Index: " + this.tableIndex + '\n' + " ownerClassName: " + this.ownerClassName + '\n' + " name: " + this.name + '\n' + " descriptor: " + this.descriptor + '\n' + "}";
-
equals
public boolean equals(java.lang.Object other)
Checks forObject-equality between'this'instance and'other'.- Overrides:
equalsin classjava.lang.Object- Parameters:
other- This may be any Java-Object, but only an instance ofConstantPool.Referencewill permit this method to returnTRUE.- Returns:
TRUEif-and-only-if parameter'other'is an instance ofReferenceand has identical field values.- Code:
- Exact Method Body:
if (!(other instanceof Reference)) return false; Reference r = (Reference) other; return (this.tag == r.tag) && Objects.equals(this.ownerClassName, r.ownerClassName) && (this.ownerClassIndex == r.ownerClassIndex) && (this.ownerClassNameUTF8Index == r.ownerClassNameUTF8Index) && Objects.equals(this.name, r.name) && (this.nameUTF8Index == r.nameUTF8Index) && Objects.equals(this.descriptor, r.descriptor) && (this.descriptorUTF8Index == r.descriptorUTF8Index);
-
hashCode
public int hashCode()
Generates a Hash-Code.- Overrides:
hashCodein classjava.lang.Object- Returns:
- An integer Hash-Code that may be used by Java's Hashing Data-Structures.
- Code:
- Exact Method Body:
return this.name.hashCode() + this.ownerClassNameUTF8Index + this.nameUTF8Index + this.descriptorUTF8Index;
-
-