Java反射机制详解


详细解释请点转载地址:http://www.cnblogs.com/lzq198754/p/5780331.html


      1.获得类的完整的包名和类名:

TestReflect testReflect = new TestReflect();
         System.out.println(testReflect.getClass().getName());

  2.实例化Class对象的三种方法:
        
Class<?> class1 = Class.forName( "net.xsoftlab.baike.TestReflect" );
Class<?> class2 = new TestReflect().getClass();
Class<?>  class3 = TestReflect. class ;

3.获取一个类的父类和实现的接口:
// 实例化对象
Class<?> clazz = Class.forName( "net.xsoftlab.baike.TestReflect" );
         // 取得父类
         Class<?> parentClass = clazz.getSuperclass();
         System.out.println( "clazz的父类为:"  + parentClass.getName());
         // clazz的父类为: java.lang.Object
         // 获取所有的接口
         Class<?> intes[] = clazz.getInterfaces();
         System.out.println( "clazz实现的接口有:" );
         for  ( int  i =  0 ; i < intes.length; i++) {
             System.out.println((i +  1 ) +  ":"  + intes[i].getName());
}

4.获得类中的所有的构造函数:
  Constructor<?> cons[] = class1.getConstructors();
         // 查看每个构造方法需要的参数
         for  ( int  i =  0 ; i < cons.length; i++) {
             Class<?> clazzs[] = cons[i].getParameterTypes();
             System.out.print( "cons["  + i +  "] (" );
             for  ( int  j =  0 ; j < clazzs.length; j++) {
                 if  (j == clazzs.length -  1 )
                     System.out.print(clazzs[j].getName());
                 else
                     System.out.print(clazzs[j].getName() +  "," );
             }
             System.out.println( ")" );
         }

5.获得某个类的全部属性:
Class<?> clazz = Class.forName( "net.xsoftlab.baike.TestReflect" );
         System.out.println( "===============本类属性===============" );
         // 取得本类的全部属性
         Field[] field = clazz.getDeclaredFields();
         for  ( int  i =  0 ; i < field.length; i++) {
             // 权限修饰符
             int  mo = field[i].getModifiers();
             String priv = Modifier.toString(mo);
             // 属性类型
             Class<?> type = field[i].getType();
             System.out.println(priv +  " "  + type.getName() +  " "  + field[i].getName() +  ";" );
         }
         
         System.out.println( "==========实现的接口或者父类的属性==========" );
         // 取得实现的接口或者父类的属性
         Field[] filed1 = clazz.getFields();
         for  ( int  j =  0 ; j < filed1.length; j++) {
             // 权限修饰符
             int  mo = filed1[j].getModifiers();
             String priv = Modifier.toString(mo);
             // 属性类型
             Class<?> type = filed1[j].getType();
             System.out.println(priv +  " "  + type.getName() +  " "  + filed1[j].getName() +  ";" );
         }
    
6.获得某个类的全部方法:
Class<?> clazz = Class.forName( "net.xsoftlab.baike.TestReflect" );
         Method method[] = clazz.getMethods();
         for  ( int  i =  0 ; i < method.length; ++i) {
// 返回值类型
             Class<?> returnType = method[i].getReturnType();
// 参数
             Class<?> para[] = method[i].getParameterTypes();
             int  temp = method[i].getModifiers();
             System.out.print(Modifier.toString(temp) +  " " );
             System.out.print(returnType.getName() +  "  " );
             System.out.print(method[i].getName() +  " " );
             System.out.print( "(" );
             for  ( int  j =  0 ; j < para.length; ++j) {
                 System.out.print(para[j].getName() +  " "  "arg"  + j);
                 if  (j < para.length -  1 ) {
                     System.out.print( "," );
                 }
             }
             Class<?> exce[] = method[i].getExceptionTypes();
             if  (exce.length >  0 ) {
                 System.out.print( ") throws " );
                 for  ( int  k =  0 ; k < exce.length; ++k) {
                     System.out.print(exce[k].getName() +  " " );
                     if  (k < exce.length -  1 ) {
                         System.out.print( "," );
                     }
                 }
             else  {
                 System.out.print( ")" );
             }
             System.out.println();
         }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值