java 反射可以给对象添加方法和属性吗

java 反射可以给对象添加方法和属性吗,第1张

不可以,你可以想像一下,反射发生的时机和步骤。当通过反射获得了指定对象的Class对象之后,此时的对象是存放在堆内存中的,而且已经完成了编译,此时的对象是无法对其进行添加熟悉和方法的。换种思路,如果可以的话,那么修改厚的对象将不再是原有类的对象,那么原有类类型的引用变量引用当前对象势必报错。你可以写个例子试试。

class

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等都一样

以上纯属个人意见,

学得不是很深,希望能给你带来帮助

第一种:通过forName()方法;

第二种:类.class;

第三种:对象.getClass()。

举例如下:

package

test

public class Demo{

public static void

main(){

Class<?>c1 = null

Class<?>c2 =

null

Class<?>c3 =

null

//三种反射用实例化方式

try{

//最常用的一种形式

c1 =

Class.forName("test.X")

}catch(ClassNotFoundException

e){

e.printStackTrace()

}

//通过Object类中的方法实例化

c2

= new X().getClass()

//通过类.class实例化

c3 =

X.class

System.out.println("类名:" + c1.getName())

//得到类名

System.out.println("类名:" + c2.getName())

//得到类名

System.out.println("类名:" + c3.getName())

//得到类名

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11238274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存