Java反射之动态数组

  本文由广州Java培训中心为你整理:

  * 要把可变参数都当做是其对应的数组类型参数; 如 show(XX… is)作为show(XX[] is)调用; 若可变参数元素类型是引用类型:

  * JDK内部接收到参数之后

  * ,会自动拆包取出参数再分配给该底层方法,为此我们需要把这个数组实参先包装成一个Object对象或者把实际参数作为一个Object一维数组的元素再传递。

  * 若可变参数元素类型是基本类型:

  * JDK内部接收到参数之后,不会拆包,所以可以不必再封装。不过封装了也不会错。所以建议,不管基本类型还是引用类型都使用Object[]封装一层,保证无误。

  * 以后使用反射调用方法: 推荐使用 invoke(方法底层对象, new Object[]{ 底层方法需要的实际参数 });这个应该说是万能的

  package cn.com.java.wwh.www;

  import java.lang.reflect.Method;

  import java.util.Arrays;

  class Test{

  public static void main(String [] args){

  System.out.println(Arrays.toString(args));

  }

  public static void show1(String…args)

  {

  System.out.println(Arrays.toString(args));

  }

  public static void show2(int [] args){

  System.out.println(Arrays.toString(args));

  }

  }

  public class InvokeMethodDemo {

  public static void main(String[] args)throws Exception {

  // 获得类的字节码

  Class test = Test.class;

  Method method = test.getMethod("show1", String[].class);

  System.out.println(method);

  // 当调用静态的方法时,invoke的第一个参数可以为null.正常是写成

  // method.invoke(test.newInstance(),"疯狂软件","22");//错误!

  // method.invoke(null,"疯狂软件","22");//错误!它就类似show1(String s1, String s2)

  // method.invoke(null,new String[]{"疯狂软件","22"});//错误!

  // method.invoke(null, new Object[]{"疯狂软件","22"});//错误!

  method.invoke(null, (Object)new String[]{"疯狂软件","22"});//正确写法

  method.invoke(null,new Object[]{new String[]{"疯狂软件","22"}});//正确写法

  // -----------------第二种情况----------------------

  Method meth = test.getMethod("show2", int[].class);

  // meth.invoke(null,1,2,3,4);//错误

  meth.invoke(null,new int[]{1,2,3});//正确

  // meth.invoke(null,new Object[]{1,2,3});//错误!

  meth.invoke(null,(Object)new int[]{1,2,3});//正确

  meth.invoke(null,new Object[]{new int[]{1,2,3,4}});//正确

  // 加入调用Test的main方法

  Method me = test.getMethod("main",String[].class);

  me.invoke(null, new Object[]{new String[]{"疯狂软件","无悔"}});

  }

  }

  学真正Java技术,当然选疯狂软件Java培训机构,打造国内标准Java人才

  疯狂软件Java培训优势

  1. Java是世界第一大编程语言,市场占有率达20%。

  2.广州最专业Java培训机构,多年教学经验。

  3.学员技术牛就业率最好,就业薪资都在5000以上。

  4.部分老师还是Java技术系列书籍的作者,由这样的Java书籍原创作者讲课可想而知课程条理清晰、讲解清楚,知识面广、深度足够!

  5.疯狂软件Java培训课程以项目实战带动教学,上课打破传统课堂模式,以实训项目贯穿教学,带领学生一起做企业真实项目。

  疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。高薪从IT名企请来项目经理为学员亲自授课,对学员进行实战教学,在没有工作经验的学员,在疯狂java,通过大量全真经典企业级项目进行集中培训,学员通过数月培训都可获得1-2年的工作经验,进而在同类的求职者中脱颖而出。疯狂Java培训让你体会java编程的快乐,项目开发的兴奋,成就感,通过短短几个月的时间,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!

 

转载于:https://www.cnblogs.com/gojava/p/3555556.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值