简述java的反射机制,java反射有参构造

  简述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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: