A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李金中 于 2014-2-12 16:36 编辑

关于张孝祥老师视频里对于形参为数组的函数的反射的两种调用方法的分析
package com.itheima;
import java.lang.reflect.*;

public class reflex {

        public static void main(String[] args)throws Exception
        {        
                Person p1 = new Person("First");
               
                Method mPerson2 = Class.forName("com.itheima.Person").getDeclaredMethod("setName", String.class);
                mPerson2.invoke(p1, "abc");//第一种方式,按JDK1.5进行分析
                mPerson2.invoke(p1, (Object)"abc");//第一种方式,把object显示调出,同上一句一样的效果。
                mPerson2.invoke(p1, new Object[]{"abc"});//第二种方式,按JDK1.4进行分析
               
                Method mPerson = Class.forName("com.itheima.Person").getDeclaredMethod("print", String[].class);
                mPerson.setAccessible(true);
               
                /*第一种, 对应JDK1.5,告诉编译器我就一个Object参数,是用JDK1.5的方式传的;若果不加object修饰,编译器就会把
                 new String[]当成 new Object[],按第二种即JDK1.4的方式进行解析,肯定不好使。*/
                mPerson.invoke(p1, (Object)new String[]{"Hello","World!"});//此处 new String[]{"Hello", "World!"}等同于上面的"abc"
                mPerson.invoke(p1, new Object[]{new String[]{"Hello", "World!"}});//第二种,对应JDK1.4的方式,进行解析        
        }
}

class Person
{
        Person(String str)
        {
                pStr = str;
        }
        
        public String getName()
        {
                return pStr;
        }
        
        public void setName(String str)
        {
                pStr = str;
        }
        public void print(String[] args)
        {
                for(String str : args)
                {
                        System.out.println(str);
                }
        }
        public String toString()
        {
                return pStr;
        }
        
        private String pStr;
        private int num;
}
分析见代码注释!!。。。。。。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马