反射
1. Class 类的使用
2. 方法的反射
3. 成员变量的反射
4. 构造函数的反射
5. JAVA 类加载机制
Class 类
1)在面向对象的世界里,万事万物皆对象。
java 语言中,静态的成员,普通的数据类型不是对象。
类是对象,类是java.lang.Class 类的实例对象。
任何一个类都是Class 的实例对象,这个实例对象有三种表示方式。
1. 第一种表达式 实际在告诉我们任何一个类都有一个隐含的静态成员变量。
Class c1=lei.class;
2. 第二种表达式 已经知道了该类的对象通过 getClass 方法
Class c2=对象.getClass();
3. 第三种表达式
类也是对象,是Class 类的实例对象
这个对象我们成为该类的类类型
Class c3=null
c3=Class.forName("完整的路径");
我们可以通过类的类类型创建类的实例对象。
3) 编译时刻加载类是静态加载类,运行时刻加载类是动态加载。
4) 基本的数据类型 void 关键字 都存在类类型
5) Class 类的 基本API 操作
package test;
import java.lang.reflect.Method;
public class ClassUtil {
/**
* 打印类的信息,包含类的成员函数,类的成员变量
* @param obj
*/
public static void printClassMessage(Object obj){
Class c=obj.getClass();// 传递的是那个子类对象,c 就是该子类的类类型
// 获取类的名称
System.out.println("类的名称是:"+c.getName());
/*
* Method 类,方法对象
* 一个成员方法就是一个 Method 对象
* getMethods() 获取的是所有的public 的函数,包括父类继承的方法
* getDeclaredMethods() 获取的是所有该类自己声明的方法,不问访问权限
*/
Method[] ms=c.getMethods();
for(int i=0;i<ms.length;i++){
//得到方法的返回值类型的类类型
Class returnType=ms[i].getReturnType();
System.out.print(returnType.getName()+" ");
// 得到方法的名称
System.out.print(ms[i].getName()+"(");
// 获取参数类型
Class[] paramTypes=ms[i].getParameterTypes();
for(Class class1:paramTypes){
System.out.print(class1.getName()+",");
}
System.out.println(")");
}
}
}

浙公网安备 33010602011771号