java反射的基本实现

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.DateFormatSymbols;
import java.util.*;

import static sun.management.snmp.jvminstr.JvmThreadInstanceEntryImpl.ThreadStateMap.Byte1.other;

public class Test{
   public static void main(String[] args){
       String name;
       if(args.length > 0)
           name = args[0];
       else{
           Scanner s = new Scanner(System.in);
           name = s.nextLine();
       }

       try{
           Class c1 = Class.forName(name);
           Class supercl = c1.getSuperclass();
           String modifiers = Modifier.toString(c1.getModifiers());
           if(modifiers.length() > 0){
               System.out.print(modifiers + " ");
           }
           System.out.print("class " + name);
           if(supercl != null && supercl != Object.class)
               System.out.print("extends " + supercl.getName());
           printInterface(c1);
           System.out.print("\n{\n");
           printConstructors(c1);
           System.out.println();
           printMethods(c1);
           System.out.println();
           printFields(c1);
           System.out.println("}");

       }catch (Exception e){
           e.printStackTrace();
       }
   }

   //打印构造器
   public static void printConstructors(Class cl){
       Constructor[] constructors = cl.getConstructors();
       for(Constructor c : constructors){
           String name = c.getName();
           System.out.print("   ");
           String modifiers = Modifier.toString(c.getModifiers());  //获得修饰符
           if(modifiers.length() > 0)
               System.out.print(modifiers + " ");
           System.out.print(name + " (");

           Class[] paramTypes = c.getParameterTypes();  //获得参数
           for(int j = 0;j < paramTypes.length;j++){
               if(j > 0)
                   System.out.print(", ");
               System.out.print(paramTypes[j].getName());
           }
           System.out.println(");");
       }
   }

   //打印方法
   public static void printMethods(Class cl){
       Method[] methods = cl.getDeclaredMethods();
       for(Method m : methods){
           Class returnType = m.getReturnType();
           String name = m.getName();

           System.out.print("   ");
           String modifiers = Modifier.toString(m.getModifiers());
           if(modifiers.length() > 0)
               System.out.print(modifiers + " ");
           System.out.print(returnType.getName() + " " + name + "(");

           Class[] paramTypes = m.getParameterTypes();
           for(int j = 0;j < paramTypes.length;j++){
               if(j > 0)
                   System.out.print(", ");
               System.out.print(paramTypes[j].getName());
           }
           System.out.println(");");
       }
   }

   //打印实例域
   public static void printFields(Class cl){
       Field[] fields = cl.getFields();

       for(Field f : fields){
           System.out.print("   ");
           String name = f.getName();
           Class type = f.getType();
           String modifier = Modifier.toString(f.getModifiers());
           if(modifier.length() > 0)
               System.out.print(modifier + " ");
           System.out.println(type.getName() + " " + name + ";");
       }
   }

   //打印所实现的接口
   public static void printInterface(Class cl){
       Class[] interfaces = cl.getInterfaces();
       if(interfaces.length > 0) {
           System.out.println(" implements ");
           for (Class i : interfaces) {
               if(interfaces.length > 1){
                   System.out.print(", ");
               }
               System.out.print(i.getName());
           }

       }
   }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值