`

如何在一个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的main方法中实现这个功能,以及相关的HTTP请求和响应处理。 首先,Java中发送HTTP POST请求通常会用到`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp。下面我们将...

    XSLT 调用 Java 的类方法

    在这个Java类中,定义了一个静态方法`replace`,该方法接收一个字符串参数,并将字符串中的"unmi"替换为"unmi.cc"。 ##### 3. XML 输入文件 (example.xml) ```xml <name>unmi <blog>http://unmi.cc</blog> ...

    Java中实现在一个方法中调用另一个方法

    本篇文章将深入探讨如何在一个方法中调用另一个方法,无论是同在一个类内还是不同类之间。 首先,让我们来看一下在同一类中如何进行方法调用。在Java中,方法分为静态方法和非静态方法两种类型。静态方法属于类级别...

    《kettle中调用java类》示例代码

    这种情况下,开发者会编写一个独立的Java类,包含一个main方法来处理输入数据并返回MD5值。 总的来说,Kettle通过调用Java类,极大地扩展了其数据处理能力,使得用户能够利用Java的强大功能来解决复杂的数据问题。...

    java方法调用

    - 示例:假设类`MyClass`有一个非静态方法`doSomething()`,那么可以在另一个非静态方法中直接调用它。 2. **在非静态方法内部调用静态方法** - 调用格式:`ClassName.staticMethodName(参数1, 参数2, ...);` - ...

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

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

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

    也就是说,同一个类中可以存在多个签名不同的`main`方法。不过,JVM始终只调用`public static void main(String[])`这个特定的`main`方法。 6. **main方法的返回类型**:`void`,表示`main`方法不返回任何值。由于`...

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

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

    反射,动态加载指定类调用类中的方法

    下面是一个简单的示例,演示了如何动态加载一个类并调用其方法: ```java public class Tafcm01 { public static void main(String[] args) { try { // 1. 加载类 Class<?> clazz = Class.forName(...

    Java反射调用方法

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息,包括但不限于获取类的方法、字段、构造器等,并能动态调用方法和修改字段值。这个特性使得Java具有了更...

    java远程方法调用

    Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算模型,允许一个Java虚拟机(JVM)上的对象通过网络调用另一个JVM上对象的方法,如同调用本地对象一样。这一特性使得Java应用...

    C#调用JAVA方法

    在这个例子中,`com.example.MyJavaClass`是Java类,`myMethod`是其一个无参方法。通过IKVM.NET,我们可以在C#中轻松地创建Java对象并调用其方法。 总之,C#调用Java方法利用了IKVM.NET这一桥梁,实现了.NET与Java...

    java 的main方法

    在Java中,`Thread`类的实例是一个线程对象,调用`start()`方法后,操作系统会为该线程分配CPU时间片,从而开始执行`run()`方法内的代码。 线程的并发执行能够充分利用CPU资源,尤其是在处理I/O密集型任务时,避免...

    Java类间方法调用实例.pdf

    在这个例子中,`fjt()`方法在`B`类中没有被声明为静态,因此我们首先创建了`B`类的一个实例`joe`,然后通过`joe.fjt()`来调用这个方法。 在Java中,类间方法调用不仅限于同一包内的类,也可以跨包调用。如果要调用...

    main方法启动服务

    在Java编程语言中,"main方法启动服务"指的是利用Java应用程序的主入口点,即`main`方法来启动一个服务或应用。`main`方法是每个可执行Java程序的起点,由Java虚拟机(JVM)调用。下面将详细阐述`main`方法的定义、...

    批处理执行java项目main方法

    在Java开发中,如果我们有一个包含主函数(Main方法)的类,通常我们会通过JDK提供的`java`命令来运行它。批处理文件可以帮助我们自动化这个过程,避免手动输入命令行参数。下面将详细讲解如何创建和理解这样的...

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

    在Java中,你不能直接调用另一个类的Main方法,但可以通过执行含有Main方法的类来间接调用,如`public static void main(String[] args) { AnotherClass.main(args); }` 8. **Main方法是否一定要在主类中?** 不...

Global site tag (gtag.js) - Google Analytics