飞猫xxx

导航

 

 

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 }

 

 

 

posted on 2013-08-15 14:44  飞猫xxx  阅读(216)  评论(0)    收藏  举报