`
shijinling87807697
  • 浏览: 49405 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

反射机制

    博客分类:
  • java
 
阅读更多
java反射技术是java技术的特征之一,它允许运行中的java程序对自身进行检查,或者说自审,并能直接操作程序的内部属性。简单的说,java是让你可以通过名称来获得对象(类、属性、方法)的技术。反射是爱程序运行时确定对象的哪个成员变量或方法可用的一种处理机制。反射的特点:
1、可以使用反射动态的创建对象
2、应用程序需要在运行时加载一个特定的类,一边实现某个任务时可以用到反射
使用反射的步凑:

1、要对哪个类使用反射就创建哪个类的类模板

2、类名点class

3、 对象点getClass() 调用Object的getClass()方法

4、Class.forName(类的全限定名) 参数为一个类的全限定名即包名点类名 适合用于不知道类名的情况下即将全限定名放入外部如配置文件 通过解析后传入

在大的项目中,由于有多个业务类,而我们不知道用户要用到哪个类,所以反射很好的为我们解决了这个难题,通过客户端传入的特定字符串,用反射动态的创建对象。

spring管理项目,通过配置文件,实例化对象,原理反射

在**公司实习,当时做一款基于Android平台手机游戏(纸牌游戏),用BitmapFactory类对各种纸牌逐一进行加载。

  String[] type = { "clubs", "diamonds", "hearts", "spades" };

  String[] num = { "ace", "two", "three", "four", "five", "six", "seven",
    "eight", "nine", "ten", "jack", "queen", "king" };

  cardImages = new Bitmap[6][13];

  try { // 四个花色的牌
   for (int i = 0; i < num.length; i++) {
    for (int j = 0; j < type.length; j++) {
     Field field = R.drawable.class.getField("card_" + num[i] + "_"
       + type[j]);
     cardImages[j][i] = BitmapFactory.decodeResource(
       getResources(), field.getInt(R.drawable.class));
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }

要想进行反射就必须依靠Class这个类,当JVM在装载每一个类或者Java接口的时候,会为每一个类或接口创建一个代表它本省的java.lang.Class类的实例。所以可以通过Class类得到一个类或接口的完整信息。比如:

       

          -->Package 类对应着该类或接口所在的包

 

          -->Constructor 类对应着类中的构造方法

 

          -->Method 类对应着类中的普通方法

         

          -->Field 类对应着类或接口中的字段

 


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics