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);} } }