package com.github.chaoswang.learning.java.jvm.clz; import java.util.ArrayList; import java.util.List; import com.github.chaoswang.learning.java.jvm.constant.ClassInfo; import com.github.chaoswang.learning.java.jvm.constant.ConstantPool; import com.github.chaoswang.learning.java.jvm.field.Field; import com.github.chaoswang.learning.java.jvm.method.Method; public class ClassFile { //Class�ļ��Ĵΰ汾�� private int minorVersion; //Class�ļ������汾��,Java SE 6.0��Ӧ�������֧��Java SE 5.0�ı����������Class�ļ��ṹ����֮���� private int majorVersion; /** * Class�ļ��г�������Ҫ�洢���� �����Լ��������ã�������������Ҫ�����ַ����� * final������ֵ����ij�����Եij�ʼֵ�ȵȣ�������������Ҫ�洢��ͽӿڵ�ȫ�޶����ƣ� * �ֶε������Լ��� �����������������Լ������� * CONSTANT_Utf8_info,CONSTANT_Float_info,CONSTANT_Double_info */ private ConstantPool pool; //��ʾ����߽ӿڵķ�����Ϣ private AccessFlag accessFlag; //��ij�������������������� private ClassIndex clzIndex; //�ֶα����Ϣ private List<Field> fields = new ArrayList<Field>(); //������ private List<Method> methods = new ArrayList<Method>(); public ClassIndex getClzIndex() { return clzIndex; } public AccessFlag getAccessFlag() { return accessFlag; } public void setAccessFlag(AccessFlag accessFlag) { this.accessFlag = accessFlag; } public ConstantPool getConstantPool() { return pool; } public int getMinorVersion() { return minorVersion; } public void setMinorVersion(int minorVersion) { this.minorVersion = minorVersion; } public int getMajorVersion() { return majorVersion; } public void setMajorVersion(int majorVersion) { this.majorVersion = majorVersion; } public void setConstPool(ConstantPool pool) { this.pool = pool; } public void setClassIndex(ClassIndex clzIndex) { this.clzIndex = clzIndex; } public void addField(Field f) { this.fields.add(f); } public List<Field> getFields() { return this.fields; } public void addMethod(Method m) { this.methods.add(m); } public List<Method> getMethods() { return methods; } public void print() { // if (this.accessFlag.isPublicClass()) { // System.out.println("Access flag : public "); // } // System.out.println("Class Name:" + getClassName()); // // System.out.println("Super Class Name:" + getSuperClassName()); } private String getClassName() { int thisClassIndex = this.clzIndex.getThisClassIndex(); ClassInfo thisClass = (ClassInfo) this.getConstantPool().getConstantInfo(thisClassIndex); return thisClass.getClassName(); } private String getSuperClassName() { ClassInfo superClass = (ClassInfo) this.getConstantPool().getConstantInfo(this.clzIndex.getSuperClassIndex()); return superClass.getClassName(); } }