# 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, that is, 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`
  Source was read from file.
  `static final byte`
  `HEAP`
  Source was read from heap.
  `static final byte`
  `ZIP`
  Source was read from 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()`
  Creates a deep copy of this class.
  `void`
  `dump(DataOutputStream file)`
  Dumps Java class to output stream in binary format.
  `void`
  `dump(File file)`
  Dumps class to a file.
  `void`
  `dump(OutputStream file)`
  Dumps Java class to output stream in binary format.
  `void`
  `dump(String fileName)`
  Dumps 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()`
  Gets annotations on the class.
  `final <T extends Attribute>
  T`
  `getAttribute(byte tag)`
  Gets attribute for given tag.
  `Attribute[]`
  `getAttributes()`
  Gets attributes of the class.
  `byte[]`
  `getBytes()`
  Gets class in binary format.
  `String`
  `getClassName()`
  Gets the class name.
  `int`
  `getClassNameIndex()`
  Gets the class name index.
  `static BCELComparator<JavaClass>`
  `getComparator()`
  Gets the comparison strategy object.
  `ConstantPool`
  `getConstantPool()`
  Gets the constant pool.
  `Field[]`
  `getFields()`
  Gets the fields.
  `String`
  `getFileName()`
  Gets the file name of class.
  `int[]`
  `getInterfaceIndices()`
  Gets indices in constant pool of implemented interfaces.
  `String[]`
  `getInterfaceNames()`
  Gets names of implemented interfaces.
  `JavaClass[]`
  `getInterfaces()`
  Gets interfaces directly implemented by this JavaClass.
  `int`
  `getMajor()`
  Gets the major number of class file version.
  `Method`
  `getMethod(Method m)`
  Gets a Method corresponding to java.lang.reflect.Method if any.
  `Method[]`
  `getMethods()`
  Gets the methods of the class.
  `int`
  `getMinor()`
  Gets the minor number of class file version.
  `String`
  `getPackageName()`
  Gets the package name.
  `Repository`
  `getRepository()`
  Gets the ClassRepository which holds its definition.
  `final byte`
  `getSource()`
  Gets the source.
  `String`
  `getSourceFileName()`
  Gets the file name where this class was read from.
  `String`
  `getSourceFilePath()`
  Gets the source file path including the package path.
  `JavaClass`
  `getSuperClass()`
  Gets the superclass for this JavaClass object, or null if this is `Object`.
  `JavaClass[]`
  `getSuperClasses()`
  Gets list of super classes of this class in ascending order.
  `String`
  `getSuperclassName()`
  returns the super class name of this class.
  `int`
  `getSuperclassNameIndex()`
  Gets the class name index.
  `int`
  `hashCode()`
  Return value as defined by given BCELComparator strategy.
  `boolean`
  `implementationOf(JavaClass inter)`
  Checks if this class is an implementation of interface inter.
  `final boolean`
  `instanceOf(JavaClass superclass)`
  Equivalent to runtime "instanceof" operator.
  `final boolean`
  `isAnonymous()`
  Checks if this class is anonymous.
  `final boolean`
  `isClass()`
  Checks if this is a class.
  `final boolean`
  `isNested()`
  Checks if this class is nested.
  `boolean`
  `isRecord()`
  Tests whether this class was declared as a record
  `final boolean`
  `isSuper()`
  Checks if this is a super class.
  `void`
  `setAttributes(Attribute[] attributes)`
  Sets the attributes.
  `void`
  `setClassName(String className)`
  Sets the class name.
  `void`
  `setClassNameIndex(int classNameIndex)`
  Sets the class name index.
  `static void`
  `setComparator(BCELComparator<JavaClass> comparator)`
  Sets the comparison strategy object.
  `void`
  `setConstantPool(ConstantPool constantPool)`
  Sets the constant pool.
  `void`
  `setFields(Field[] fields)`
  Sets the fields.
  `void`
  `setFileName(String fileName)`
  Sets File name of class, aka SourceFile attribute value.
  `void`
  `setInterfaceNames(String[] interfaceNames)`
  Sets the interface names.
  `void`
  `setInterfaces(int[] interfaces)`
  Sets the interfaces.
  `void`
  `setMajor(int major)`
  Sets the major version.
  `void`
  `setMethods(Method[] methods)`
  Sets the methods.
  `void`
  `setMinor(int minor)`
  Sets the minor version.
  `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)`
  Sets the superclass name.
  `void`
  `setSuperclassNameIndex(int superclassNameIndex)`
  Sets the superclass name index.
  `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
    Source was read from heap.
    See Also:
      - Constant Field Values

  - ### FILE

    public static final byte FILE
    Source was read from file.
    See Also:
      - Constant Field Values

  - ### ZIP

    public static final byte ZIP
    Source was read from 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()
    Gets the comparison strategy object.
    Returns:
      Comparison strategy object.

  - ### setComparator

    public static void setComparator(BCELComparator<JavaClass> comparator)
    Sets the comparison strategy object.
    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()
    Creates a deep copy of this class.
    Returns:
      deep copy of this class.

  - ### dump

    public void dump(DataOutputStream file) throws IOException
    Dumps 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
    Dumps class to a file.
    Parameters:
      `file` - Output file.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### dump

    public void dump(OutputStream file) throws IOException
    Dumps 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
    Dumps 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` - if the class cannot be found.
    Since:
      6.8.0

  - ### getAllInterfaces

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

  - ### getAnnotationEntries

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

  - ### getAttribute

    public final <T extends Attribute> T getAttribute(byte tag)
    Gets attribute for given tag.
    Type Parameters:
      `T` - the attribute type.
    Parameters:
      `tag` - the attribute 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()
    Gets attributes of the class.
    Returns:
      Attributes of the class.

  - ### getBytes

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

  - ### getClassName

    public String getClassName()
    Gets the class name.
    Returns:
      Class name.

  - ### getClassNameIndex

    public int getClassNameIndex()
    Gets the class name index.
    Returns:
      Class name index.

  - ### getConstantPool

    public ConstantPool getConstantPool()
    Gets the constant pool.
    Returns:
      Constant pool.

  - ### getFields

    public Field[] getFields()
    Gets the fields.
    Returns:
      Fields, that is, 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()
    Gets the file name of class.
    Returns:
      File name of class, aka SourceFile attribute value.

  - ### getInterfaceIndices

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

  - ### getInterfaceNames

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

  - ### getInterfaces

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

  - ### getMajor

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

  - ### getMethod

    public Method getMethod(Method m)
    Gets a Method corresponding to java.lang.reflect.Method if any.
    Parameters:
      `m` - the method to find.
    Returns:
      A `Method` corresponding to java.lang.reflect.Method if any.

  - ### getMethods

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

  - ### getMinor

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

  - ### getPackageName

    public String getPackageName()
    Gets the package name.
    Returns:
      Package name.

  - ### getRepository

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

  - ### getSource

    public final byte getSource()
    Gets the source.
    Returns:
      either HEAP (generated), FILE, or ZIP.

  - ### getSourceFileName

    public String getSourceFileName()
    Gets the file name where this class was read from.
    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
    Gets the superclass for this JavaClass object, or null if this is `Object`.
    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
    Gets list of super classes of this class in ascending order.
    Returns:
      list of super classes of this class in ascending order, that is, `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()
    Gets the class name index.
    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
    Checks if this class is an implementation of interface inter.
    Parameters:
      `inter` - the interface to check.
    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.
    Parameters:
      `superclass` - the superclass to check.
    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()
    Checks if this class is anonymous.
    Returns:
      true if anonymous.
    Since:
      6.0

  - ### isClass

    public final boolean isClass()
    Checks if this is a class.
    Returns:
      true if this is a class.

  - ### isNested

    public final boolean isNested()
    Checks if this class is nested.
    Returns:
      true if nested.
    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()
    Checks if this is a super class.
    Returns:
      true if this is a super class.

  - ### setAttributes

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

  - ### setClassName

    public void setClassName(String className)
    Sets the class name.
    Parameters:
      `className` - the class name.

  - ### setClassNameIndex

    public void setClassNameIndex(int classNameIndex)
    Sets the class name index.
    Parameters:
      `classNameIndex` - the class name index.

  - ### setConstantPool

    public void setConstantPool(ConstantPool constantPool)
    Sets the constant pool.
    Parameters:
      `constantPool` - the constant pool.

  - ### setFields

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

  - ### setFileName

    public void setFileName(String fileName)
    Sets File name of class, aka SourceFile attribute value.
    Parameters:
      `fileName` - the file name.

  - ### setInterfaceNames

    public void setInterfaceNames(String[] interfaceNames)
    Sets the interface names.
    Parameters:
      `interfaceNames` - the interface names.

  - ### setInterfaces

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

  - ### setMajor

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

  - ### setMethods

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

  - ### setMinor

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

  - ### setRepository

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

  - ### setSourceFileName

    public void setSourceFileName(String sourceFileName)
    Sets absolute path to file this class was read from.
    Parameters:
      `sourceFileName` - the source file name.

  - ### setSuperclassName

    public void setSuperclassName(String superclassName)
    Sets the superclass name.
    Parameters:
      `superclassName` - the superclass name.

  - ### setSuperclassNameIndex

    public void setSuperclassNameIndex(int superclassNameIndex)
    Sets the superclass name index.
    Parameters:
      `superclassNameIndex` - the superclass name index.

  - ### toString

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