Java基础加强---反射

------- android培训java培训、期待与您交流! ----------

 

1.Class

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

得到字节码对应的实例对象:

  (1)类名.class ;例:System.classDate.class

  (2)对象.getClass();例:new Date().getClass()

  (3)Class.forName(“类名”);例:Class.forName(“java.lang.String”)

每个数组属于被映射为class对象,所有具有相同元素类型和维数的数组都共享该class对象。

九个基本类型class对象:基本java类型(booleanbtyeshortintlongfloatdoublechar)和关键字void 都表示为class对象。

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

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

2.Constructor

(1)得到某个类的构造方法就用:getConstructor(Class<?>...param)方法

//获取String类的一个构造方法

ConstructoConstructor= String.class.getConstructor(

StringBuffer.class);   

    

   //用这个构造方法创建对象

String str = (String)constructor.newInstance(

new StringBuffer("1234"));

  

   (2)class.newInstance()方法可以创建空参数对象

例:

String str1 = (String)Class.forName(java.lang.String)

.newInstance();

该方法内部先得到默认的构造方法,再用默认构造方法创建实例对象。

 

3.Field类

 

用来对类中的属性进行操作。常用方法:getField(String field)getFields()

(1)getField(String field) 获取一个属性

   如果field的修饰符为public,直接用 类的对象的class文件

.getField(filed).get(类对象)访问该field成员变量;

   如果是其他修饰符,则要用  类对象class文件.getDeclaredField(

field).setAccessible(true).get(类对象)访问变量,先获取任何限定的成员变量,再将其设为可访问,最后取变量值。

(2)getFields()/getDeclaredFields()   获取类中所有成员变量,得到一个变量数组。

 

4.methodl类

用来对类中的方法进行操作。

(1)得到类中的某一个方法

例:Method charAt = Class.forName(java.lang.String).getMethod

(charAt,int.class);

这就是取到了String类中的参数一个int类型的charAt方法。

(2)得到方法后要进行调用

:  String str = abc;

  通常调用方法为:str.charAt(1);

  而反射调用方法为:charAt.invoke(str,1)

如果传递给invoke()方法的第一个参数为null,则说明该Method对象对应的是一个静态方法,main()等。

Invoke()方法:

JDK1.4版本:public Object invoke(Object obj,Object[] args);

JDK1.5版本:public Object invoke(Object obj,Object... args);

获取一个类的main()方法

String className = args[0];//传入一个类名

Method mainMethod = Class.forName(className).getMethod(main,

String[].class);

mainMethod.invoke(null,(Object)new String[]{aa,bb});

//调用main方法并传入参数

 

5.Array类

  数组的反射,包含相同元素且维度相同的数组拥有同一个字节码文件,所以可以用反射来获取该数组。

常用方法:

 isArray(): 判断字节码文件对象是否是数组

 Array.getLength(Object array):获取数组长度

 Array.get(Object array, int index):返回指定数组对象中索引组件的值

 

基本类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用;

基本类型的二维数组可以被当做Object[]类型使用;

非基本类型的一维数既可以当做Object类型使用,又可以当做Object[]类型使用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值