反射-调用有参数和无参数的方法

package com.cn.service;

/**
* 接口对象
* @author Administrator
*
*/
public interface China {

public static final String NATIONAL="China";//常量

public static final String AUTHOR="老李";//接口中的常量

public void sayChina();//方法,实现接口必须重写

public String sayHello(String name,int age);//方法,实现接口必须重写
}


package com.cn.model;

import com.cn.service.China;

public class Person implements China{

private String name;

private int age;

public Person(){

}

public Person(String name){
this.name=name;
}

public Person(String name,int age){
this(name);//调用有一个参数的构造函数
this.setAge(age);
}

public void sayChina() {
// TODO Auto-generated method stub
System.out.println("作者:"+AUTHOR+" ,国籍: "+NATIONAL);
}

public String sayHello(String name, int age) {
// TODO Auto-generated method stub
return name+",你好!我今年"+age+"岁了";
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}



}


package com.cn.component;

import java.lang.reflect.Method;
/**
* 反射之调用类中有参数和无参数的方法
* @author Administrator
*
*/
public class InvokeSayChina {

public static void main(String args[]) {
Class<?> c = null;
try {
c = Class.forName("com.cn.model.Person");//申明class对象
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
//调用无参数方法
// Method method = c.getMethod("sayChina");//通过class对象取得方法名称,该方法没参数
// method.invoke(c.newInstance());//调用方法,必须传递对象实例
//输出结果:作者:老李 ,国籍: China

//调用有参数的方法 ,obj...args表示可变参数
Method method=c.getMethod("sayHello", String.class,int.class);//第一个参数为方法名称,后面参数为可变参数
String returnValue="";//初始化返回值
//method.invoke返回一个Object,因此必须向下转型
returnValue=(String)method.invoke(c.newInstance(), "小李子",28);//第一个参数表示类的实例化对象,第二个及其以后参数为可变参数
System.out.println(returnValue);

}
catch(Exception e){
e.printStackTrace();
}
//输出结果:
//小李子,你好!我今年28岁了

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值