如何在一个java类main方法中调用另一个类中的main方法

   本文转载:http://jinyan798.iteye.com/blog/546369

 在项目中用到了在一个java类main方法中调用另一个类中的main方法来解决java1.2不能使用Axis的问题。在网上查了查发现还真能调用。这用到了java的反射机制。

      下面直接写例子吧:

这个类是被调用的main方法类:

Java代码 public class Run {   
  1.     public static void main(String[] args) {   
  2.         String str=args[0]+"Hello World";   
  3.         System.out.println(str);   
  4.     }   
  5. }  
public class Run {
	public static void main(String[] args) {
		String str=args[0]+"Hello World";
		System.out.println(str);
	}
}

 

下面是调用main方法的类:

Java代码 public class JobRun {   
  1.     public static void main(String[] args) {   
  2.         String idStr = "YAya";   
  3.             try {   
  4.                 Method method = Run.class.getMethod("main",   
  5. String[].class);   
  6.                 method.invoke(null,   
  7.                         (Object) new String[] { idStr });   
  8.             } catch (Exception e) {   
  9.                 e.printStackTrace();   
  10.             }   
  11.     }   
  12. }  
public class JobRun {
	public static void main(String[] args) {
		String idStr = "YAya";
			try {
				Method method = Run.class.getMethod("main",
String[].class);
				method.invoke(null,
						(Object) new String[] { idStr });
			} catch (Exception e) {
				e.printStackTrace();
			}
	}
}

 

    在写程序时,调用Method类的方法invoke(Object,Object)时老是报参数类型不匹配。我是这样写的method.invoke(Run.class.newInstance(),(Object) new String[]{idStr});错就错在main方法是类Run的静态方法,调用时是不需要对象实例的。

     还有一个兼容问题:

 

          method.invoke(null, new String[]{"ma","xiao"}); //★这思想是对的,但是版本问题,不允许了
		
		//现在对了,然后还报 wrong number of arguments,下面详细说明
		//::
		//现在说参数的个数不对
		//我要的方法我已经说了,它需要一个参数,那个参数是一个数组
		//如果按照1.5的语法,是没有问题的
		//但是SUN必须要考虑到老版本,
		//老版本的语法,很多的时候拿到一个数组时,它会迈力的给你一个一个拆开
		//而JVM又是按照老版本的方法执行的,
		//所以这里我传的new String[]{"ma","xiao"}被它拆成两个参数了
		//所以如果我只传一个,new String[]{"ma"},还是拆,说argument type mismatch,
		//当然,需要的是数组,你给个字串当然 argument type mismatch
		
		//怎么办,你既然要拆,那我最多再给你包一层,让你去拆吧
		method.invoke(null, new Object[]{new String[]{"ma","xiao"}});
		//这样,JVM一拆,拆出的一个数组,正是我想要的效果 run OK!
		
		//还有一个方法
		method.invoke(null, (Object)new String[]{"hello","world"});
		//强制转成一个 Object 1.4不是看见数组参数就拆么?[数组的引用应该是不会拆的]
		//现在 JVM看不见数组了,不拆了,run OK!

      就这么多了,希望对大家有帮助

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值