java反射例子:
1.创建接口类
package com.test.serv;
public interface China {
/**
* 中国人
*/
public static final String GUOJI="中国"; //定义全局变量
public static final String AUTHOR="王一";
public void sayChina(); //定义无参的抽象方法
public String sayHello(String name, int age); //定义有参的抽象方法
}
2.实现接口类
package com.test.servImp;
import com.test.serv.China;
/**
* 定义person类实现接口
*
*/
public class Person implements China {
private String name;
private int age;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name) {
// TODO Auto-generated constructor stub
this.name=name;
}
public Person(String name, int age) {
//声明有一个参数的构造方法
this(name);
this.setAge(age);
}
public void sayChina() {
// 覆盖方法,输出信息
System.out.println("作者:"+AUTHOR+" 国籍:"+GUOJI);
}
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;
}
}
3.反射调用
package util;
import java.lang.reflect.Method;
public class InvokeSayChinaDemo {
/**
* 反射调用
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Class<?> c1 =null; //声明class对象
try {
c1 = Class.forName("com.test.servImp.Person"); //实例化class对象
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Method m = c1.getMethod("sayChina"); //调用person类中的sayChina方法
m.invoke(c1.newInstance()); //调用方法:invoke 实例化对象:c1.newInstance()
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}