1、反射的基本原理
正常方式:引入需要的“包.类"——>通过new实例化——>取得实例化对象
反射方式:实例化对象——>getClass()方法——>得到完整地”包.类"名称
要通过对象找到一个类的名称,此时就需要用反射机制。
例子:通过一个对象取得完整地“包.类”名称
1 package getclassdemo 2 class X {} 3 public static void main(String[] args) 4 { 5 X x = new X(); 6 System.out.pritnln(x.getClass().getName()); 7 }
*所有类的对象实际上都是Class类的实例
在java中Object类是一切类的父类,那么所有类的对象实际上也是java.lang.Class类的实例,所以所有的对象都可以转变为java.lang.Class类型表示。
2、实例化Class类对象的三个方法——forName()、类.class、对象.getClass()
代码示例:
1 package getclassdemo 2 class X 3 { 4 5 } 6 public class GetClassDemo02 7 { 8 public static void main(String[] args) 9 { 10 Class<?> c1 = null; 11 Class<?> c2 = null; 12 Class<?> c3 = null; 13 try 14 { 15 c1 = Class.forName("getclassdemo.X"); 16 } 17 catch(ClassNotFoundException e) 18 { 19 e.printStackTrace(); 20 } 21 c2 = new X().getClass(); 22 23 c3 = X.class; 24 System.out.println("类名称:"+ c1.getName()); 25 System.out.println("类名称:"+ c2.getName()); 26 System.out.println("类名称:"+ c3.getName()); 27 } 28 }
3、反射的应用——取得类的结构
getInterfaces()取得全部接口,getSuperclass()取得父类,getConstructors()取得全部构造方法,getMethods()取得全部方法,getFields()和getDeclaredFileds()取得一个类中的全部属性。
*下面实现getInterfaces()
1 public class GetInterfaceDemo 2 { 3 public static void main(String[] args) 4 { 5 Class<?> c1 = null; 6 try 7 { 8 c1 = Class.forName("xxx.xxx"); //这个类在代码中省略 9 } 10 catch(ClassNotFoundException e) 11 { 12 e.printStackTrace(); 13 } 14 Class<?> c[] = c1.getInterfaces(); 15 16 for(int i = 0; i<c.length;i++) 17 { 18 System.out.println("实现的接口名称:"+c[i].getName()); 19 } 20 } 21 }
浙公网安备 33010602011771号