用反射机制调用类的main方法

本文介绍如何使用Java反射机制调用指定类的main方法。通过配置文件指定目标类的全限定名,并通过反射获取该类及其main方法,最终传递参数并执行main方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运用反射机制来调用类的main方法,在一些框架当中经常用到。我们只需要将一个类的全名(即要包括包名)配置到配置文件当中。

我们知道main方法的参数是一个String类型的数组,那么在反射当中应该要注意这个地方。代码中有详解。

 

MainClass.java

package com.cloud.reflect;

public class MainClass {
	public static void main(String[] args) {
		for (String arg : args) {
			System.out.println(arg);
		}
	}
}

 

MainTest.java

package com.cloud.reflect;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class MainTest {
	public static void main(String[] args) throws Exception {
		//用类加载器加载配置文件
		InputStream in = MainTest.class.getResourceAsStream("config.properties");
		Properties props = new Properties();
		props.load(in);
		//关闭IO流
		in.close();
		String className = props.getProperty("className");
		
		Method mainMethod = Class.forName(className).getMethod("main", String[].class);
		//由于main方法是静态方法,所以第一个参数为null, 由于main方法只接收一个字符串数组的参数,
		//如果你的第二参数是new String[]{"chris", "cloud"}这种形式的话,会报错的。因为
		//JDK会认为你传了两个String类型的参数,为此解决方案有两种,推荐用第一种。
		
		//第一种方案:
		mainMethod.invoke(null, (Object) new String[]{"chris", "cloud"});
		//第二种方案:
		mainMethod.invoke(null, new Object[]{new String[]{"chris", "cloud"}});
	}
}

 

config.properties

className=com.cloud.reflect.MainClass

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值