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

  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/gojava/p/3555556.html
Copyright © 2011-2022 走看看