黑马程序员_Java中的反射

-----------android培训java培训、java学习型技术博客、期待与您交流! ------------

 

反射的基石——Class类

Class代表什么事物?

Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。

Class cls2=Date.Class

Classs.forName("……");

八个基本类和void都有对应的Class对象。

例:String str1="abc";

Class cls1=str1.getClass();

Class cls2=String.Class();

Class cls3=Class.forName("java.lang.string");

System.out.println(cls1==cls2);     true

System.out.println(cls2==cls3);     true

Class.isprimitive()该类是否是原始类型。

cls1.isprimitive()    String不是基本类型   false

int.Class.isprimitive()    true

int.Class==Integer.Class    false

int.Class==Integer.TYPE    true

 

数组类型的Class对象:Class.isArray()

int[].Class.isArray()    true

总之,只要在原程序中出现的类型,都有各自的Class实例对象。例如:int[],void.

 

反射就是把Java类中的各种成分映射成相应的java类。

 

问题:将任意一个对象中的所有String类型的成员变量所对应的字符串内容的"b"改成"a"。

Field[] fields=obj.getClass.getFields();

for(Field field:fields)

{

if(field.getType()==String.Class)

{

String oldValue=(String)field.get(obj);

String newValue=oldValue.replace('b','a');

field.set(obj,newValue);

System.out.println(obj);

}

}

 

用反射方式执行某个类中的main方法。

普通类名.main(参数)即可完成,为什么用反射?因为具体哪个类不确定。

数组的反射:数组的类型和维度相同,则其Class也相同。

例:int[] a1=new int[3];

int[] a2=new int[4];

int[][] a3=new int[2][3];

String[] a4=new String[3];

a1.getClass()==a2.getClass();   true

a1.getClass()==a3.getClass();   false

a1.getClass()==a4.getClass();   false

 

数组名[下标].getClass().getName()  只可以获得某个数组元素的类型。

 

反射的作用:实现框架功能。

-----------android培训java培训、java学习型技术博客、期待与您交流! ------------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值