The java.lang package in Java provides fundamental classes that are automatically imported into every Java program. The Class class, specifically java.lang.Class, is a core class in this package. It represents classes and interfaces in a running Java application, serving as the entry point for Java’s reflection API. Below is a detailed explanation of the Class class:
Overview of java.lang.Class
- Purpose: Class is a runtime representation of a Java class or interface. Every object in Java is associated with a Class object that describes its type.
- Key Role: It enables reflection, allowing programs to inspect and manipulate classes, methods, fields, and constructors dynamically at runtime.
- Final Class: Class is final, so it cannot be subclassed.
- Generic Type: Since Java 5, Class is parameterized (e.g., Class<T>), where T represents the type the Class object represents.
Key Characteristics
- Instantiation: You cannot directly create a Class object using new. Instead, Class objects are automatically created by the JVM when classes are loaded.
- Obtaining a Class Object: There are three primary ways to get a Class object:
- Using .class syntax: Class<?> clazz = String.class;
- Using getClass(): Class<?> clazz = “Hello”.getClass();
- Using Class.forName(): Class<?> clazz = Class.forName(“java.lang.String”);
- No Public Constructor: The Class class has no public constructors; the JVM manages its creation.
Common Methods
The Class class provides numerous methods for reflection and class metadata inspection. Here are some key ones:

import java.lang.reflect.*;
public class ClassMethodsDemo {
public static void main(String[] args) {
try {
// Get the Class object for the specified class
Class<?> clazz = Class.forName("java.util.ArrayList");
// 1. getName()
System.out.println("Class Name: " + clazz.getName());
// 2. getSimpleName()
System.out.println("Simple Name: " + clazz.getSimpleName());
// 3. getCanonicalName()
System.out.println("Canonical Name: " + clazz.getCanonicalName());
// 4. getSuperclass()
Class<?> superClass = clazz.getSuperclass();
System.out.println("Superclass: " + superClass.getName());
// 5. getDeclaredFields()
System.out.println("\nDeclared Fields:");
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
System.out.println(field.getName() + " : " + field.getType());
}
// 6. getDeclaredMethods()
System.out.println("\nDeclared Methods:");
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
// 7. getDeclaredConstructors()
System.out.println("\nDeclared Constructors:");
Constructor<?>[] constructors = clazz.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor);
}
// 8. getMethod()
System.out.println("\nPublic Method 'add':");
Method addMethod = clazz.getMethod("add", Object.class);
System.out.println("Method: " + addMethod);
// 9. getModifiers()
int modifiers = clazz.getModifiers();
System.out.println("\nModifiers: " + Modifier.toString(modifiers));
// 10. isInstance()
Object instance = clazz.getDeclaredConstructor().newInstance();
System.out.println("\nIs instance of ArrayList: " + clazz.isInstance(instance));
// 11. cast()
Object castedInstance = clazz.cast(instance);
System.out.println("Casted Instance: " + castedInstance);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
Class Name: java.util.ArrayList
Simple Name: ArrayList
Canonical Name: java.util.ArrayList
Superclass: java.util.AbstractList
Declared Fields:
size : int
elementData : class [Ljava.lang.Object;
DEFAULT_CAPACITY : int
MAX_ARRAY_SIZE : int
EMPTY_ELEMENTDATA : class [Ljava.lang.Object;
DEFAULTCAPACITY_EMPTY_ELEMENTDATA : class [Ljava.lang.Object;
Declared Methods:
add
remove
clear
size
isEmpty
contains
indexOf
lastIndexOf
toArray
get
set
addAll
removeAll
retainAll
subList
equals
hashCode
toString
clone
ensureCapacity
trimToSize
forEach
replaceAll
sort
spliterator
Declared Constructors:
public java.util.ArrayList(int)
public java.util.ArrayList(java.util.Collection)
public java.util.ArrayList()
Public Method 'add':
Method: public boolean java.util.ArrayList.add(java.lang.Object)
Modifiers: public
Is instance of ArrayList: true
Casted Instance: []
*/