zoukankan      html  css  js  c++  java
  • 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核心技术,迅速成为技能型的现代化高端人才,迅速获得高薪就业!

  • 相关阅读:
    python记录程序运行时间的三种方法
    LeetCode 922. 按奇偶排序数组 II 做题小结
    LeetCode 976. 三角形的最大周长 做题小结
    LeetCode 1122. 数组的相对排序 做题小结
    LeetCode1528. 重新排列字符串 做题小结
    LeetCode 738. 单调递增的数字 做题小结
    selenium——鼠标操作ActionChains:点击、滑动、拖动
    剑指 Offer 32
    剑指 Offer 32
    二叉树的应用:二叉排序树的删除
  • 原文地址:https://www.cnblogs.com/gojava/p/3555556.html
Copyright © 2011-2022 走看看