Java中提供了Class类,可以通过Class类获取类的定义信息,包括包名、类名、类上的注释(Annotation)、类的修饰符、父类、继承的接口、构造方法、成员变量和成员方法。这些信息分别使用java.lang.annotation.Annotation、 java.lang.reflect.Constructor、java.lang.reflect.Field、java.lang.reflect.Method、java.lang.reflect.Modifier来表示。可以动态调用方法和属性。下面的例子展示了基本用法。
package ch5;
import static java.lang.System.out;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ClassInfo {
public static void main(String args[]){
Class c=String.class;
// 1、得到所有方法
Method[] methods = c.getMethods();
// 2、得到某个方法
try{
// 第一个参数是方法的名字,后面的参数是参数的类型
Method find = c.getMethod("indexOf", int.class);
// 动态调用,第一个参数是对象,后面的参数是方法的实参(采用了变长参数)
System.out.println(find.invoke("hello,welcome!",'c'));
}catch(Exception e){
e.printStackTrace();
}
// 3、得到类的名字
out.println("类的名字为:"+c.getName());
// 4、得到包名,通过Package对象处理
System.out.println("包名为:"+c.getPackage().getName());
// 5、得到修饰符,通过Modifier处理
int modifier = c.getModifiers();
if(Modifier.isPublic(modifier)){
System.out.println("类是公有的!");
}
if(Modifier.isPrivate(modifier)){
System.out.println("类是私有的!");
}
if(Modifier.isFinal(modifier)){
System.out.println("类是最终类!");
}
// 6、得到父类
System.out.prin