zoukankan      html  css  js  c++  java
  • java利用反射打印出类的结构

    1 输入一个类名:java.lang.String将打印出String类定义的结构,例如:

    public final class java.lang.String
    {
      public java.lang.String([B,int,int);
      public java.lang.String([B,java.nio.charset.Charset);
      public java.lang.String([B,java.lang.String);
      public java.lang.String([B,int,int,java.nio.charset.Charset);
      public java.lang.String([B,int,int,java.lang.String);
      java.lang.String([C,boolean);
      public java.lang.String(java.lang.StringBuilder);
      public java.lang.String(java.lang.StringBuffer);
      public java.lang.String([B);
      public java.lang.String([I,int,int);
      public java.lang.String();
      public java.lang.String([C);
      public java.lang.String(java.lang.String);
      public java.lang.String([C,int,int);
      public java.lang.String([B,int);
      public java.lang.String([B,int,int,int);
    
      public boolean equals(java.lang.Object);
      public java.lang.String toString();
      public int hashCode();
      public int compareTo(java.lang.String);
      public volatile int compareTo(java.lang.Object);
      public int indexOf(java.lang.String,int);
      public int indexOf(java.lang.String);
      public int indexOf(int,int);
      public int indexOf(int);
      static int indexOf([C,int,int,[C,int,int,int);
      static int indexOf([C,int,int,java.lang.String,int);
      public static java.lang.String valueOf(int);
      public static java.lang.String valueOf(long);
      public static java.lang.String valueOf(float);
      public static java.lang.String valueOf(boolean);
      public static java.lang.String valueOf([C);
      public static java.lang.String valueOf([C,int,int);
      public static java.lang.String valueOf(java.lang.Object);
      public static java.lang.String valueOf(char);
      public static java.lang.String valueOf(double);
      public char charAt(int);
      private static void checkBounds([B,int,int);
      public int codePointAt(int);
      public int codePointBefore(int);
      public int codePointCount(int,int);
      public int compareToIgnoreCase(java.lang.String);
      public java.lang.String concat(java.lang.String);
      public boolean contains(java.lang.CharSequence);
      public boolean contentEquals(java.lang.CharSequence);
      public boolean contentEquals(java.lang.StringBuffer);
      public static java.lang.String copyValueOf([C);
      public static java.lang.String copyValueOf([C,int,int);
      public boolean endsWith(java.lang.String);
      public boolean equalsIgnoreCase(java.lang.String);
      public static transient java.lang.String format(java.util.Locale,java.lang.String,[Ljava.lang.Object;);
      public static transient java.lang.String format(java.lang.String,[Ljava.lang.Object;);
      public void getBytes(int,int,[B,int);
      public [B getBytes(java.nio.charset.Charset);
      public [B getBytes(java.lang.String);
      public [B getBytes();
      public void getChars(int,int,[C,int);
    void getChars([C,int);
      private int indexOfSupplementary(int,int);
      public native java.lang.String intern();
      public boolean isEmpty();
      public static transient java.lang.String join(java.lang.CharSequence,[Ljava.lang.CharSequence;);
      public static java.lang.String join(java.lang.CharSequence,java.lang.Iterable);
      public int lastIndexOf(int);
      public int lastIndexOf(java.lang.String);
      static int lastIndexOf([C,int,int,java.lang.String,int);
      public int lastIndexOf(java.lang.String,int);
      public int lastIndexOf(int,int);
      static int lastIndexOf([C,int,int,[C,int,int,int);
      private int lastIndexOfSupplementary(int,int);
      public int length();
      public boolean matches(java.lang.String);
      private boolean nonSyncContentEquals(java.lang.AbstractStringBuilder);
      public int offsetByCodePoints(int,int);
      public boolean regionMatches(int,java.lang.String,int,int);
      public boolean regionMatches(boolean,int,java.lang.String,int,int);
      public java.lang.String replace(char,char);
      public java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence);
      public java.lang.String replaceAll(java.lang.String,java.lang.String);
      public java.lang.String replaceFirst(java.lang.String,java.lang.String);
      public [Ljava.lang.String; split(java.lang.String);
      public [Ljava.lang.String; split(java.lang.String,int);
      public boolean startsWith(java.lang.String,int);
      public boolean startsWith(java.lang.String);
      public java.lang.CharSequence subSequence(int,int);
      public java.lang.String substring(int);
      public java.lang.String substring(int,int);
      public [C toCharArray();
      public java.lang.String toLowerCase(java.util.Locale);
      public java.lang.String toLowerCase();
      public java.lang.String toUpperCase();
      public java.lang.String toUpperCase(java.util.Locale);
      public java.lang.String trim();
    
      private final [C value;
      private int hash;
      private static final long serialVersionUID;
      private static final [Ljava.io.ObjectStreamField; serialPersistentFields;
      public static final java.util.Comparator CASE_INSENSITIVE_ORDER;
    }

    主程序如下:

        public static void main(String[] args) throws ClassNotFoundException
        {
    String name;
            if (args.length>0) {
                name=args[0];
            }
            else {
                Scanner in=new Scanner(System.in);
                System.out.println("enter class name(e.g java.util.Date)");
                name=in.next();
            }
            
            try {
                Class c1=Class.forName(name);
                Class superClass=c1.getSuperclass();
                //获取类的修饰符
                String modifiers=Modifier.toString(c1.getModifiers());
                if (modifiers.length()>0) {
                    System.out.print(modifiers+" ");
                }
                System.out.print("class "+c1.getName());
                
                if (superClass!=null&&superClass!=Object.class) {
                    System.out.print(" extends "+superClass.getName());
                }
                
                //
    表示换行
                System.out.print("
    {
    ");
                //打印构造器
                printConstractors(c1);
                System.out.println();
                //打印类的方法
                printMethods(c1);
                
                System.out.println();
                //打印域
                printFields(c1);
                
                System.out.println("}");
                
            } catch (Exception e) {
                // TODO: handle exception
            }
    
            }
    private static void printFields(Class c1) {
            // TODO Auto-generated method stub
            Field[] fields= c1.getDeclaredFields();
            for (Field field : fields) {
                Class type= field.getType();
                String name=field.getName();
                System.out.print("  ");
                String modifiers=Modifier.toString(field.getModifiers());
                if (modifiers.length()>0) {
                    System.out.print(modifiers+" ");
                }
                System.out.println(type.getName()+" "+name+";");
            }
        }
    
    
        private static void printMethods(Class c1) {
            // TODO Auto-generated method stub
            //获取当前类的所有方法
            Method[] methods= c1.getDeclaredMethods();
            for (Method m : methods) {
                Class returnType= m.getReturnType();
                String methodName=m.getName();
                String modifiers=Modifier.toString(m.getModifiers());
                if (modifiers.length()>0) {
                    System.out.print("  "+modifiers+" ");
                }
                System.out.print(returnType.getName()+" "+methodName+"(");
                
                //打印方法参数
                Class[] paramTypes= m.getParameterTypes();
                for (int i = 0; i < paramTypes.length; i++) {
                    if (i>0) {
                        System.out.print(",");
                    }
                    System.out.print(paramTypes[i].getName());
                }
                System.out.println(");");
            }
        }
    
    
        private static void printConstractors(Class c1) {
            // TODO Auto-generated method stub
            //得到当前类的所有构造器,包括受保护的和私有的,不包含超类的
            Constructor[] constructors= c1.getDeclaredConstructors();
            for (Constructor constructor : constructors) {
                System.out.print("  ");
                String name=constructor.getName();
                String modifiers=Modifier.toString(constructor.getModifiers());
                if (modifiers.length()>0) {
                    System.out.print(modifiers+" ");
                }
                System.out.print(name+"(");
                
                //打印构造器的参数
                Class[] paramsTypes= constructor.getParameterTypes();
                for (int i = 0; i < paramsTypes.length; i++) {
                    if (i>0) {
                        System.out.print(",");
                    }
                    System.out.print(paramsTypes[i].getName());
                }
                System.out.println(");");
            }
        }
  • 相关阅读:
    用 ArcMap 发布 ArcGIS Server FeatureServer Feature Access 服务 PostgreSQL 版本
    ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务
    ArcScene 创建三维模型数据
    ArcMap 导入自定义样式Symbols
    ArcMap 导入 CGCS2000 线段数据
    ArcMap 导入 CGCS2000 点坐标数据
    ArcGis Server manager 忘记用户名和密码
    The view or its master was not found or no view engine supports the searched locations
    python小记(3)操作文件
    pytest(2) pytest与unittest的区别
  • 原文地址:https://www.cnblogs.com/mibing/p/10870633.html
Copyright © 2011-2022 走看看