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岁了
}
}