Java Reflection is a process of examining or modifying the run time behavior of a class at run time.
The java.lang.Class class provides many methods that can be used to get metadata, examine and change the run time behavior of a class.
The java.lang and java.lang.reflect packages provide classes for java reflection.
The Reflection API is mainly used in:
The java.lang.Class class performs mainly two tasks:
There are 3 ways to get the instance of Class class. They are as follows:
Let's see the simple example of forName() method.
class Simple{}
class Test{
public static void main(String args[]){
Class c=Class.forName("Simple");
System.out.println(c.getName());
}
}It returns the instance of Class class. It should be used if you know the type. Moreover, it can be used with primitives.
class Simple{}
class Test{
void printName(Object obj){
Class c=obj.getClass();
System.out.println(c.getName());
}
public static void main(String args[]){
Simple s=new Simple();
Test t=new Test();
t.printName(s);
}
}If a type is available but there is no instance then it is possible to obtain a Class by appending ".class" to the name of the type.It can be used for primitive data type also.
class Test{
public static void main(String args[]){
Class c = boolean.class;
System.out.println(c.getName());
Class c2 = Test.class;
System.out.println(c2.getName());
}
}Following methods of Class class is used to determine the class object:
| 1) public boolean isInterface(): determines if the specified Class object represents an interface type. |
| 2) public boolean isArray(): determines if this Class object represents an array class. |
| 3) public boolean isPrimitive(): determines if the specified Class object represents a primitive type. |
Let's see the simple example of reflection api to determine the object type.
class Simple{}
interface My{}
class Test{
public static void main(String args[]){
try{
Class c=Class.forName("Simple");
System.out.println(c.isInterface());
Class c2=Class.forName("My");
System.out.println(c2.isInterface());
}catch(Exception e){System.out.println(e);}
}
}