package com.coding.basic.homework_04.jvm.field; import com.coding.basic.homework_04.jvm.constant.ConstantPool; import com.coding.basic.homework_04.jvm.info.UTF8Info; import com.coding.basic.homework_04.jvm.util.ByteCodeIterator; public class Field { private int accessFlag; private int nameIndex; private int descriptorIndex; private ConstantPool constantPool; public Field(int accessFlag, int nameIndex, int descriptorIndex, ConstantPool constantPool) { this.accessFlag = accessFlag; this.descriptorIndex = descriptorIndex; this.nameIndex = nameIndex; this.constantPool = constantPool; } public static Field parse(ConstantPool constantPool, ByteCodeIterator iterator) { int accessFlag = iterator.nextU2ToInt(); int nameIndex = iterator.nextU2ToInt(); int descriptorIndex = iterator.nextU2ToInt(); //TODO这里字段没有属性,没做解析工作 int attributeCount = iterator.nextU2ToInt(); Field field = new Field(accessFlag, nameIndex, descriptorIndex, constantPool); if(attributeCount > 0){ throw new RuntimeException("Field Attribute has not been implemented"); } return field; } public String toString() { String name = ((UTF8Info)constantPool.getConstantInfo(this.nameIndex)).getValue(); String desc = ((UTF8Info)constantPool.getConstantInfo(this.descriptorIndex)).getValue(); return name +":"+ desc; } }