c
=
class.forname("student")
//通过字符串装载类,
必须是绝对路径,
即包括包名
object
o
=
c.newinstance()
//获取装载类的实例,
如果找不到就会抛出异常
class[]
cs=
{sting.class,int.class}
//定义一个类的数组,
一般这种都是用在method的参数列表
//string.class说明传的是类型
method
m
=
c.getmethod("study",cs)
//获取装载类的实例的study方法,
注意后面的参数,
class[]
ca
=
{"tom",18}
//和上面有点不同,
这里传的是值
object
result
=
m.invoke(o,ca)
//执行method方法,并获取结果
反射一般都用在类名,字段,方法可以随便变化的时候,
还可以进行统一的处理,提高扩展性
比如说hibernate框架的实体类,
预先你不可能知道实体类会有什么字段,
包括字段的类型都是有可能随意变化的,
这时候要获取指定类的字段信息就必须得使用反射了.
还有struts的actionform等都一样
以上纯属个人意见,
学得不是很深,希望能给你带来帮助
Java代码
package
import java lang reflect Field
import java lang reflect InvocationTargetException
import java lang reflect Method
public class TestBean {
private int age
public static void main(String []args) throws InstantiationException IllegalAccessException SecurityException NoSuchFieldException{
try {
Class<?>class =Class forName( TestBean )
Object tObject=class newInstance()
Field field=class getDeclaredField( age )
field setAccessible(true) //设置私有属性范围
field set(tObject )
System out print(field get(tObject))
try {
Method method=class getMethod( setAge int class)
method invoke(tObject )
Method getMethod=class getMethod( getAge )
System out println(getMethod invoke(tObject))
} catch (NoSuchMethodException e) {
// TODO Auto generated catch block
e printStackTrace()
} catch (IllegalArgumentException e) {
// TODO Auto generated catch block
e printStackTrace()
} catch (InvocationTargetException e) {
// TODO Auto generated catch block
e printStackTrace()
}
} catch (ClassNotFoundException e) {
// TODO Auto generated catch block
e printStackTrace()
}
}
public int getAge() {
return age
}
public void setAge(int age) {
this age = age
}
lishixinzhi/Article/program/Java/hx/201311/26324
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)