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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

案例练习:用反射的方法执行某个类中的main方法。程序需求:写一个程序,这个程序能够根据用户提供的类名,去执行该类中的main方法

package com.reflection.method;

import java.lang.reflect.Method;

public class ReflectionInvokMain {
        public static void main(String[] args) {
                //TestMain.main(new String[]{"1","2","3"});
                //
                try {
                        Class cls = Class.forName(args[0]);        //获取程序入口某个类的Class对象
                        Method methodMain = cls.getMethod("main", String[].class);        //获取main方法
                        //invoke的args参数,如果是一个数组,程序会看做一个包,并解包(为了兼容旧版本的jdk),所以参数个数会变多,将数数组转型成Object就不会解包了
                        //或者写成methodMain.invoke(null, new String[]{new String[]{"A","B","C"}}); 也行,解包只做一次,接了也是一个数组
                        methodMain.invoke(null, (Object)new String[]{"A","B","C"});
                       
                       
                        /**
                         * 运行前打开eclipse run configuration,配置program arguments 参数 com.reflection.method.TestMain
                         * 这样做是对主线程的main方法传入一个参数 com.reflection.method.TestMain,而这个参数是一个具体的类名,
                         * 也就是对args[0] 赋值,指明获取的类对象,否则访问数组异常
                         */
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}

class TestMain{
        public static void main(String[] args) {
                for(String str : args){
                        System.out.print(str);
                }
        }
}

1 个回复

倒序浏览
不错。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马