`

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

    博客分类:
  • java
阅读更多

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

      下面直接写例子吧:

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

public class Run {
	public static void main(String[] args) {
		String str=args[0]+"Hello World";
		System.out.println(str);
	}
}

 

下面是调用main方法的类:

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!

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

 

 

2
0
分享到:
评论
1 楼 pangchaofu 2011-09-12  
正好遇到这错误,学习了。

相关推荐

    java中main方法发送httpPost请求

    java语言后台请求网站操作 java中main方法发送httpPost请求

    Java程序设计基础:调用方法-方法的嵌套调用.pptx

    在定义方法时,一个方法内不能再定义另一个方法,即不能嵌套定义,但是在调用一个方法的过程中,还可以调用另一个方法,这是方法的嵌套调用。 方法的嵌套调用 假设main方法中调用a方法,a 方法中调用b方法,具体流程...

    windows下bat文件调用java的main方法

    最近项目需要,自己根据网上找的代码,自己改了一下,主要是把jar包的加载改成了循环加载,而不是一句句写。亲测可用。

    10个Java经典的Main方法面试题!

    2.不用 main 方法如何运行一个类? 不行,没有 main 方法我们不能运行 Java 类。 在 Java 7 之前,你可以通过使用静态初始化运行 Java 类。但是,从 Java 7 开始就行不通了。 3.main 方法如何传递参数?传递参数的...

    JAVA类的定义及继承演示

    定义两个类Dog,SmallDog,SmallDog继承Dog 说明一:关于Dog 两个属性,狗的名字(dogName,...最后,在测试类中的main方法中生成SmallDog类的对象,访问属性dogName和dogAge,并打印出他们的值;调用dogWalk(),看看效果.

    java继承和方法调用

    这是在java中方法的设置和调用,可以在main的函数中直接调用,简化数据量。

    JAVA类的定义与方法演示

    创建一个名为Rectangle的类来表示一个使用宽度和高度来改变量的矩形,矩形的宽度和高度由构造方法来确定。为Rectangle类创建下列方法: ...在另一个类TestRectangle中编写main方法来测试Rectangle类。

    Java实验1代码.doc

    本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...

    《Java程序设计》课程实验指导书程序代码(答案)(实验三)

    1.定义一个学生类(Student),属性有private的名字(name), public的年龄(age),专业(specialty)和封装name属性的方法:setName(),getName(),getspecialty()编写Application,创建一个学生对象,设置name和age属性值...

    java编写类进行排序

    java类,该类可以对一组数值进行由小到大排序。主类的main方法中,从键盘上输入一组数值,使用该类对其排序。

    Java复习题及答案

    1、若在某一个类定义中定义有如下的方法: final void aFinalFunction( );则该方法属于( )。 A、本地方法 B、解态方法 C、最终方法 D、抽象方法 2、main方法是Java Application程序执行的入口点,关于main方法的...

    定义一个Father和Child类,并进行测试。

    定义一个Father和Child类,并进行测试。 要求如下: 1)Father类为外部类,类中定义一个私有的String类型的属性name,...3)定义一个测试类Test,在Test类的main()方法中,创建Child对象,并调用introFather ()方法。

    java类和对象通过调用对象的方法来进行存款、取款和获取账户余额等操作.txt

    在Main类中,我们创建了一个BankAccount对象,并通过调用对象的方法来进行存款、取款和获取账户余额等操作。这个示例展示了类和对象的概念在实际应用中的运用,模拟了一个银行账户的基本操作,包括存款、取款和打印...

    main方法启动服务

    main方法启动服务-main方法启动服务-main方法启动服务

    用java代码编写一个类示例-monkey

    用java编写一个类monkey 一个简单的 Java 类 Monkey 的示例。这个类代表了一个猴子对象,并...在 main 方法中,我们创建了一个 Monkey 对象,并演示了如何调用它的方法和获取属性。您可以根据需要扩展和修改这个类。

    JAVA多线程运用

    Printer类应创建一个线程,线程读取Storage类中的值并打印值。编写程序创建Storage类的实例,并创建一个Counter对象和Printer对象操作此实例。 实验步骤: (1)、创建三个类Counter, Printer,Storage (2)、创建...

    Java多线程实现异步调用实例

    Java多线程实现异步调用实例。运行Main可以看到结果。main是主线程,另有A,B,C三个线程用不同的时间跑完。

    Java开发技术大全(500个源代码).

    invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法示例 localVariable.java 演示局部变量 localVSmember.java 局部变量与成员变量同名...

    Java实验-接口.docx

    创建另一个类Test_Vehicle,在main主方法中分别通过使用Vehicle接口创建关于Car 与Bike类的引用对象audi与yongjiu。使用接口Vehicle的两个引用对象分别调用各自的启动start()与刹车stop(),显示不同运输工具的多态性...

    java 类的相关代码

    d 声明PersonApp类,在其中的main方法中分别声明Person、Student、Teacher类型的变量,并通过构造方法初始化,然后显示各自的信息。 2 声明一个Shape接口,其中有计算面积(area)、周长(perimeter)的方法,有以下...

Global site tag (gtag.js) - Google Analytics