方法的调用
创建一个实例,获取方法,调用方法。
package my;
import java.lang.reflect.Type;
import af.test.Example;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test2
{
public static void main(String[] args) throws Exception
{
//从example.jar中加载一个类,也可以自己传一个类去尝试,里面随便加个void类型的打印一句话就行了
// void test1()
Class cls = Class.forName("af.test.Example");
//创建实例
Object obj = cls.newInstance();
//tes1没有参数
Method testMethod = cls.getDeclaredMethod("test1");
//调用这个方法,里面有一句打印
testMethod.invoke(obj);
System.out.println("Exit......");
}
}
方法的传参
package my;
import java.lang.reflect.Type;
import af.test.Example;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test2
{
public static void main(String[] args) throws Exception
{
//从example.jar中加载一个类
Class cls = Class.forName("af.test.Example");
Object obj = cls.newInstance();
//tes2传2个Integer void test(int a, int b)
Class[] in = { Integer.class, Integer.class};
Method testMethod = cls.getDeclaredMethod("test2", in);
//Method method = cls.getDeclaredMethod("test2", Integer.class, Integer.class);
Object[] value = {30, 31};
testMethod.invoke(obj, value);
System.out.println("Exit......");
}
}
方法的返回值
先创建一个实例(newInstance),然后获取这个实例的某个方法(Method),最后调用这个方法(invoke)
package my;
import java.lang.reflect.Type;
import af.test.Example;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test2
{
public static void main(String[] args) throws Exception
{
//从example.jar中加载一个类
Class cls = Class.forName("af.test.Example");
//创建 一个实例
Object obj = cls.newInstance();
//test2有两个参数 void test2(double a, double b)
Class[] argTypes = {double.class, double.class};
Method testMethod = cls.getDeclaredMethod("test5", argTypes);
//调用这个实例的方法
Object[] argValues = {4.3 , 2}; // 会自动包装为两个double对象
//在调用obj的testMethod的时候,传入参数 argValues
Object result = testMethod.invoke(obj, argValues);
//第一种方式:判断一个对象result
if(result instanceof Double)
{
double ret = (double) result;
System.out.println("结果为: " + ret);
}
//第二种方式:判断一个对象result 是否为某个类(或子类)的实例
if(Double.class.isInstance(result))
{
double ret = (double) result;
System.out.println("结果为: " + ret);
}
//第三种方式:比较一个类ccc和另一个是否相同(或是其子类)
Class ccc = result.getClass();
if(ccc.isAssignableFrom(Double.class))
{
double ret = (double) result;
System.out.println("结果为: " + ret);
}
//第四种方式:比较一个类ccc和另一个类是否相同
if(cls.equals(Double.class))
{
double ret = (double) result;
System.out.println("结果为: " + ret);
}
System.out.println("Exit.");
}
}