在Java中万事万物皆对象,所以类也是一种对象。
获取类对象的三种方式:
class Foo{
public void print(){
System.out.println("Foo");
}
}
public static void mian(String[] args){
Foo foo1 = new Foo();
//第一种获取方式
Class c1 = Foo.class;
//第二种获取方式
Class c2 = foo1.getClass();
//第三种获取方式
Class c3 = null;
try {
c3 = Class.forName("com.imooc.reflect.Foo");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//可以通过类的类类型创建类的对象实例
try {
Foo foo = (Foo)c1.newInstance();//需要有无参数的构造方法
foo.print();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
获取类的成员方法
public static void printClassMethodMessage(Object obj){
Class c = obj.getClass();
System.out.println("类的名称:" + c.getName());
Method[] methods = c.getMethods();
for (int i = 0; i < methods.length; i++){
Class returnType = methods[i].getReturnType();
System.out.print(returnType.getName() + " ");
System.out.print(methods[i].getName() + "(");
Class[] paramsType = methods[i].getParameterTypes();
for (Class temp : paramsType) {
System.out.print(temp.getName() + ",");
}
System.out.println(")");
}
}
获取类的成员变量
public static void printFieldMessage(Object obj){
Class c = obj.getClass();
Field[] fields = c.getFields();
for (Field field : fields) {
Class fieldType = field.getType();
String fieldName = field.getName();
System.out.println(fieldType.getName() + " " + fieldName);
}
}
获取类的构造函数
public static void printConMessage(Object obj){
Class c = obj.getClass();
//Constructor[] cs = c.getConstructors();
Constructor[] cs = c.getDeclaredConstructors();
for (Constructor constructor : cs) {
System.out.print(constructor.getName()+"(");
//获取构造函数的参数列表--->得到的是参数列表的类类型
Class[] paramTypes = constructor.getParameterTypes();
for (Class class1 : paramTypes) {
System.out.print(class1.getName()+",");
}
System.out.println(")");
}
}