反射

 

 

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(")");
                 }
                 
             }
}

 

posted @ 2018-06-06 00:04  雪落无痕1  阅读(139)  评论(0)    收藏  举报