简述java的反射机制,java反射有参构造
java的反射是我一直很喜欢的,因为有了这个,程序的灵活性可以大大增加,同时通用性也提高了很多。反射原理我不想大篇幅介绍。如果我在网上搜索,会有很多。(下面我只作为附录介绍)
反射是Java的一个关键属性,Java被认为是一种动态(或准动态)语言。这种机制允许程序在运行时通过反射API获得任何已知名称的类的内部信息,包括其修饰符(如public、static等。)、超类(比如Object)、实现的接口(比如Cloneable)、字段和方法的所有信息,并且可以在运行时改变字段的内容或者调用方法。
在这里,我想说的是,如果我们按照字符串来做我们想做的事情(包括动态执行相应的方法,生成相应的类),当我们传输数据的时候,大部分都是字符串(HTTP,socket)等。当我们收到这些字符串时,我们会根据这些字符串的内容做一些事情,这是一件非常好的事情。我们可以远程调用这些方法(客户端发送指定的字符串,让服务器反映它们)。
其实我也做过这样一个项目,客户端(不是用java语言写的)用socket调用服务器(用java写的)方法,同时可以直接传参数,都是按照java的反射技术实现的。好了,接下来再说。先说最基础的。下面是最基本方法的反映。
/**
* @(#)TestInt.java
*
* @作者索达E-mail:sujun10@21cn.com
* @版本1.0
* br版权所有(C),2007苏打。C
* br此程序受版权法保护。
*日期:2007年4月
*/
导入Java . lang . reflect . method;
公共类测试
{
//测试方法
公共字符串测试(字符串名称,int i)
{
system . out . println( name: name );
system . out . println(I);
返回“反射成功!”;
}
公共静态void main(String[] args)
{
尝试
{
//获取类文件,可以通过Class.for(Test )获取,这样也可以根据字符串生成类。
Class te=TestInt.class
Class[] cl=新类[2];
//添加参数类型
cl[0]=string . class;
cl[1]=int . class;
system . out . println( 1111111 );
//根据public的方法,和参数,参数的形式是Class[]
method method=te . get method( test ,cl);
system . out . println( 2222222222 );
//开始填充参数
Object[] params=新对象[2];
//params[0]=新字符串( soda );
params[0]=新字符串( soda );
params[1]=新整数(23);
system . out . println( 2222222222 );
//获取该类的实例
object obj=te . new instance();
//进行方法调用
对象结果=method.invoke(obj,params);
System.out.println (result:结果);
}
捕捉(例外e)
{
system . out . println(e);
}
}
}编译执行,就能看到想要的结果。想象一下,把那些字符串变成其他地方的数据:)
另一种方法是数组的反射。我研究了一下,有一点区别。大家要仔细看。
/**
* @(#)Test.java
*
* @作者索达E-mail:sujun10@21cn.com
* @版本1.0
* br版权所有(C),2007苏打。C
* br此程序受版权法保护。
*程序名称:FlashSyncServer
*日期:2007年1月
*/
导入Java . lang . reflect . method;
//这里就不解释了。和上一个差不多。也可以自己查一下Class类的api。
公共课考试
{
公开无效测试(double[] dou)
{
system . out . println(dou . length);
system . out . println(dou[0]);
}
公共静态void main(String[] args)引发异常
{
尝试
{
Class[] cl=新类[1];
cl[0]=double[]。类;
system . out . println( cl[0]: cl[0]);
Object[] in=新对象[1];
//这里注意,不是double[],而是Double[]。这里不能使用对象数组。
double[]db=new double[1];
db[0]=100.0;
in[0]=db;
te类=Test.class
method method=te . get method( test ,cl);
object obj=te . new instance();
Object objs=method.invoke(obj,in);
}
捕捉(例外e)
{
system . out . println(e);
}
}
}好了,基本上就是这样了。再复杂的程序,也是从基础进化来的。
本文来自java入门专栏,欢迎学习!那就是了解java中反射机制的细节(包括数组参数)。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。