# Class JavaClass

java.lang.Object
org.apache.bcel.classfile.AccessFlags
org.apache.bcel.classfile.JavaClass

All Implemented Interfaces:
  `Cloneable, Comparable<JavaClass>, Node`

public class JavaClass extends AccessFlags implements Cloneable, Node, Comparable<JavaClass>
Represents a Java class, i.e., the data structures, constant pool, fields, methods and commands contained in a Java .class file. See JVM specification for details. The intent of this class is to represent a parsed or otherwise existing class file. Those interested in programmatically generating classes should see the ClassGen class.

See Also:
  - `ClassGen`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final JavaClass[]`
  `EMPTY_ARRAY`
  Empty array.
  `static final String`
  `EXTENSION`
  The standard class file extension.
  `static final byte`
  `FILE`
  `static final byte`
  `HEAP`
  `static final byte`
  `ZIP`

  ### Fields inherited from class AccessFlags

  `access_flags`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int accessFlags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes)`
  Constructor gets all contents as arguments.
  `JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int accessFlags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes, byte source)`
  Constructor gets all contents as arguments.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `accept(Visitor v)`
  Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class.
  `int`
  `compareTo(JavaClass obj)`
  Return the natural ordering of two JavaClasses.
  `JavaClass`
  `copy()`
  `void`
  `dump(DataOutputStream file)`
  Dump Java class to output stream in binary format.
  `void`
  `dump(File file)`
  Dump class to a file.
  `void`
  `dump(OutputStream file)`
  Dump Java class to output stream in binary format.
  `void`
  `dump(String fileName)`
  Dump class to a file named fileName.
  `boolean`
  `equals(Object obj)`
  Return value as defined by given BCELComparator strategy.
  `Field`
  `findField(String fieldName, Type fieldType)`
  Finds a visible field by name and type in this class and its super classes.
  `JavaClass[]`
  `getAllInterfaces()`
  Gets all interfaces implemented by this JavaClass (transitively).
  `AnnotationEntry[]`
  `getAnnotationEntries()`
  `final <T extends Attribute>
  T`
  `getAttribute(byte tag)`
  Gets attribute for given tag.
  `Attribute[]`
  `getAttributes()`
  `byte[]`
  `getBytes()`
  `String`
  `getClassName()`
  `int`
  `getClassNameIndex()`
  `static BCELComparator<JavaClass>`
  `getComparator()`
  `ConstantPool`
  `getConstantPool()`
  `Field[]`
  `getFields()`
  `String`
  `getFileName()`
  `int[]`
  `getInterfaceIndices()`
  `String[]`
  `getInterfaceNames()`
  `JavaClass[]`
  `getInterfaces()`
  Gets interfaces directly implemented by this JavaClass.
  `int`
  `getMajor()`
  `Method`
  `getMethod(Method m)`
  `Method[]`
  `getMethods()`
  `int`
  `getMinor()`
  `String`
  `getPackageName()`
  `Repository`
  `getRepository()`
  Gets the ClassRepository which holds its definition.
  `final byte`
  `getSource()`
  `String`
  `getSourceFileName()`
  `String`
  `getSourceFilePath()`
  Gets the source file path including the package path.
  `JavaClass`
  `getSuperClass()`
  `JavaClass[]`
  `getSuperClasses()`
  `String`
  `getSuperclassName()`
  returns the super class name of this class.
  `int`
  `getSuperclassNameIndex()`
  `int`
  `hashCode()`
  Return value as defined by given BCELComparator strategy.
  `boolean`
  `implementationOf(JavaClass inter)`
  `final boolean`
  `instanceOf(JavaClass superclass)`
  Equivalent to runtime "instanceof" operator.
  `final boolean`
  `isAnonymous()`
  `final boolean`
  `isClass()`
  `final boolean`
  `isNested()`
  `boolean`
  `isRecord()`
  Tests whether this class was declared as a record
  `final boolean`
  `isSuper()`
  `void`
  `setAttributes(Attribute[] attributes)`
  `void`
  `setClassName(String className)`
  `void`
  `setClassNameIndex(int classNameIndex)`
  `static void`
  `setComparator(BCELComparator<JavaClass> comparator)`
  `void`
  `setConstantPool(ConstantPool constantPool)`
  `void`
  `setFields(Field[] fields)`
  `void`
  `setFileName(String fileName)`
  Sets File name of class, aka SourceFile attribute value
  `void`
  `setInterfaceNames(String[] interfaceNames)`
  `void`
  `setInterfaces(int[] interfaces)`
  `void`
  `setMajor(int major)`
  `void`
  `setMethods(Method[] methods)`
  `void`
  `setMinor(int minor)`
  `void`
  `setRepository(Repository repository)`
  Sets the ClassRepository which loaded the JavaClass.
  `void`
  `setSourceFileName(String sourceFileName)`
  Sets absolute path to file this class was read from.
  `void`
  `setSuperclassName(String superclassName)`
  `void`
  `setSuperclassNameIndex(int superclassNameIndex)`
  `String`
  `toString()`

  ### Methods inherited from class AccessFlags

  `getAccessFlags, getModifiers, isAbstract, isAbstract, isAnnotation, isAnnotation, isEnum, isEnum, isFinal, isFinal, isInterface, isInterface, isNative, isNative, isPrivate, isPrivate, isProtected, isProtected, isPublic, isPublic, isStatic, isStatic, isStrictfp, isStrictfp, isSynchronized, isSynchronized, isSynthetic, isSynthetic, isTransient, isTransient, isVarArgs, isVarArgs, isVolatile, isVolatile, setAccessFlags, setModifiers`

  ### Methods inherited from class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Field Details

  - ### EXTENSION

    public static final String EXTENSION
    The standard class file extension.
    Since:
      6.7.0
    See Also:
      - Constant Field Values

  - ### EMPTY_ARRAY

    public static final JavaClass[] EMPTY_ARRAY
    Empty array.
    Since:
      6.6.0

  - ### HEAP

    public static final byte HEAP
    See Also:
      - Constant Field Values

  - ### FILE

    public static final byte FILE
    See Also:
      - Constant Field Values

  - ### ZIP

    public static final byte ZIP
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### JavaClass

    public JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int accessFlags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes)
    Constructor gets all contents as arguments.
    Parameters:
      `classNameIndex` - Class name
      `superclassNameIndex` - Superclass name
      `fileName` - File name
      `major` - Major compiler version
      `minor` - Minor compiler version
      `accessFlags` - Access rights defined by bit flags
      `constantPool` - Array of constants
      `interfaces` - Implemented interfaces
      `fields` - Class fields
      `methods` - Class methods
      `attributes` - Class attributes

  - ### JavaClass

    public JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int accessFlags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes, byte source)
    Constructor gets all contents as arguments.
    Parameters:
      `classNameIndex` - Index into constant pool referencing a ConstantClass that represents this class.
      `superclassNameIndex` - Index into constant pool referencing a ConstantClass that represents this class's superclass.
      `fileName` - File name
      `major` - Major compiler version
      `minor` - Minor compiler version
      `accessFlags` - Access rights defined by bit flags
      `constantPool` - Array of constants
      `interfaces` - Implemented interfaces
      `fields` - Class fields
      `methods` - Class methods
      `attributes` - Class attributes
      `source` - Read from file or generated in memory?

- ## Method Details

  - ### getComparator

    public static BCELComparator<JavaClass> getComparator()
    Returns:
      Comparison strategy object.

  - ### setComparator

    public static void setComparator(BCELComparator<JavaClass> comparator)
    Parameters:
      `comparator` - Comparison strategy object.

  - ### accept

    public void accept(Visitor v)
    Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class. I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects.
    Specified by:
      `accept` in interface `Node`
    Parameters:
      `v` - Visitor object

  - ### compareTo

    public int compareTo(JavaClass obj)
    Return the natural ordering of two JavaClasses. This ordering is based on the class name
    Specified by:
      `compareTo` in interface `Comparable<JavaClass>`
    Since:
      6.0

  - ### copy

    public JavaClass copy()
    Returns:
      deep copy of this class

  - ### dump

    public void dump(DataOutputStream file) throws IOException
    Dump Java class to output stream in binary format.
    Parameters:
      `file` - Output stream
    Throws:
      `IOException` - if an I/O error occurs.

  - ### dump

    public void dump(File file) throws IOException
    Dump class to a file.
    Parameters:
      `file` - Output file
    Throws:
      `IOException` - if an I/O error occurs.

  - ### dump

    public void dump(OutputStream file) throws IOException
    Dump Java class to output stream in binary format.
    Parameters:
      `file` - Output stream
    Throws:
      `IOException` - if an I/O error occurs.

  - ### dump

    public void dump(String fileName) throws IOException
    Dump class to a file named fileName.
    Parameters:
      `fileName` - Output file name
    Throws:
      `IOException` - if an I/O error occurs.

  - ### equals

    public boolean equals(Object obj)
    Return value as defined by given BCELComparator strategy. By default two JavaClass objects are said to be equal when their class names are equal.
    Overrides:
      `equals` in class `Object`
    See Also:
      - `Object.equals(Object)`

  - ### findField

    public Field findField(String fieldName, Type fieldType) throws ClassNotFoundException
    Finds a visible field by name and type in this class and its super classes.
    Parameters:
      `fieldName` - the field name to find
      `fieldType` - the field type to find
    Returns:
      field matching given name and type, null if field is not found or not accessible from this class.
    Throws:
      `ClassNotFoundException`
    Since:
      6.8.0

  - ### getAllInterfaces

    public JavaClass[] getAllInterfaces() throws ClassNotFoundException
    Gets all interfaces implemented by this JavaClass (transitively).
    Throws:
      `ClassNotFoundException` - if any of the class's superclasses or interfaces can't be found.

  - ### getAnnotationEntries

    public AnnotationEntry[] getAnnotationEntries()
    Returns:
      Annotations on the class
    Since:
      6.0

  - ### getAttribute

    public final <T extends Attribute> T getAttribute(byte tag)
    Gets attribute for given tag.
    Returns:
      Attribute for given tag, null if not found. Refer to `Const.ATTR_UNKNOWN` constants named ATTR_* for possible values.
    Since:
      6.10.0

  - ### getAttributes

    public Attribute[] getAttributes()
    Returns:
      Attributes of the class.

  - ### getBytes

    public byte[] getBytes()
    Returns:
      class in binary format

  - ### getClassName

    public String getClassName()
    Returns:
      Class name.

  - ### getClassNameIndex

    public int getClassNameIndex()
    Returns:
      Class name index.

  - ### getConstantPool

    public ConstantPool getConstantPool()
    Returns:
      Constant pool.

  - ### getFields

    public Field[] getFields()
    Returns:
      Fields, i.e., variables of the class. Like the JVM spec mandates for the classfile format, these fields are those specific to this class, and not those of the superclass or superinterfaces.

  - ### getFileName

    public String getFileName()
    Returns:
      File name of class, aka SourceFile attribute value

  - ### getInterfaceIndices

    public int[] getInterfaceIndices()
    Returns:
      Indices in constant pool of implemented interfaces.

  - ### getInterfaceNames

    public String[] getInterfaceNames()
    Returns:
      Names of implemented interfaces.

  - ### getInterfaces

    public JavaClass[] getInterfaces() throws ClassNotFoundException
    Gets interfaces directly implemented by this JavaClass.
    Throws:
      `ClassNotFoundException` - if any of the class's interfaces can't be found.

  - ### getMajor

    public int getMajor()
    Returns:
      Major number of class file version.

  - ### getMethod

    public Method getMethod(Method m)
    Returns:
      A `Method` corresponding to java.lang.reflect.Method if any

  - ### getMethods

    public Method[] getMethods()
    Returns:
      Methods of the class.

  - ### getMinor

    public int getMinor()
    Returns:
      Minor number of class file version.

  - ### getPackageName

    public String getPackageName()
    Returns:
      Package name.

  - ### getRepository

    public Repository getRepository()
    Gets the ClassRepository which holds its definition. By default this is the same as SyntheticRepository.getInstance();

  - ### getSource

    public final byte getSource()
    Returns:
      either HEAP (generated), FILE, or ZIP

  - ### getSourceFileName

    public String getSourceFileName()
    Returns:
      file name where this class was read from

  - ### getSourceFilePath

    public String getSourceFilePath()
    Gets the source file path including the package path.
    Returns:
      path to original source file of parsed class, relative to original source directory.
    Since:
      6.7.0

  - ### getSuperClass

    public JavaClass getSuperClass() throws ClassNotFoundException
    Returns:
      the superclass for this JavaClass object, or null if this is `Object`
    Throws:
      `ClassNotFoundException` - if the superclass can't be found

  - ### getSuperClasses

    public JavaClass[] getSuperClasses() throws ClassNotFoundException
    Returns:
      list of super classes of this class in ascending order, i.e., `Object` is always the last element.
    Throws:
      `ClassNotFoundException` - if any of the superclasses can't be found

  - ### getSuperclassName

    public String getSuperclassName()
    returns the super class name of this class. In the case that this class is `Object`, it will return itself (`Object`). This is probably incorrect but isn't fixed at this time to not break existing clients.
    Returns:
      Superclass name.

  - ### getSuperclassNameIndex

    public int getSuperclassNameIndex()
    Returns:
      Class name index.

  - ### hashCode

    public int hashCode()
    Return value as defined by given BCELComparator strategy. By default return the hash code of the class name.
    Overrides:
      `hashCode` in class `Object`
    See Also:
      - `Object.hashCode()`

  - ### implementationOf

    public boolean implementationOf(JavaClass inter) throws ClassNotFoundException
    Returns:
      true, if this class is an implementation of interface inter
    Throws:
      `ClassNotFoundException` - if superclasses or superinterfaces of this class can't be found

  - ### instanceOf

    public final boolean instanceOf(JavaClass superclass) throws ClassNotFoundException
    Equivalent to runtime "instanceof" operator.
    Returns:
      true if this JavaClass is derived from the super class
    Throws:
      `ClassNotFoundException` - if superclasses or superinterfaces of this object can't be found

  - ### isAnonymous

    public final boolean isAnonymous()
    Since:
      6.0

  - ### isClass

    public final boolean isClass()

  - ### isNested

    public final boolean isNested()
    Since:
      6.0

  - ### isRecord

    public boolean isRecord()
    Tests whether this class was declared as a record
    Returns:
      true if a record attribute is present, false otherwise.
    Since:
      6.9.0

  - ### isSuper

    public final boolean isSuper()

  - ### setAttributes

    public void setAttributes(Attribute[] attributes)
    Parameters:
      `attributes` - .

  - ### setClassName

    public void setClassName(String className)
    Parameters:
      `className` - .

  - ### setClassNameIndex

    public void setClassNameIndex(int classNameIndex)
    Parameters:
      `classNameIndex` - .

  - ### setConstantPool

    public void setConstantPool(ConstantPool constantPool)
    Parameters:
      `constantPool` - .

  - ### setFields

    public void setFields(Field[] fields)
    Parameters:
      `fields` - .

  - ### setFileName

    public void setFileName(String fileName)
    Sets File name of class, aka SourceFile attribute value

  - ### setInterfaceNames

    public void setInterfaceNames(String[] interfaceNames)
    Parameters:
      `interfaceNames` - .

  - ### setInterfaces

    public void setInterfaces(int[] interfaces)
    Parameters:
      `interfaces` - .

  - ### setMajor

    public void setMajor(int major)
    Parameters:
      `major` - .

  - ### setMethods

    public void setMethods(Method[] methods)
    Parameters:
      `methods` - .

  - ### setMinor

    public void setMinor(int minor)
    Parameters:
      `minor` - .

  - ### setRepository

    public void setRepository(Repository repository)
    Sets the ClassRepository which loaded the JavaClass. Should be called immediately after parsing is done.

  - ### setSourceFileName

    public void setSourceFileName(String sourceFileName)
    Sets absolute path to file this class was read from.

  - ### setSuperclassName

    public void setSuperclassName(String superclassName)
    Parameters:
      `superclassName` - .

  - ### setSuperclassNameIndex

    public void setSuperclassNameIndex(int superclassNameIndex)
    Parameters:
      `superclassNameIndex` - .

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`
    Returns:
      String representing class contents.