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: [] */