zoukankan      html  css  js  c++  java
  • JAVA 反射练习 打印指定类名的所有信息

    给定类名,打印关于类的所有信息

    import java.lang.reflect.*;
    
    import javax.activation.FileDataSource;
    
    public class ReflactionTest {
    
    	public ReflactionTest() {
    		
    	}
    	public static void print(String s){
    		System.out.print(s);
    	}
    	public static void println(String s){
    		System.out.println(s);
    	}
    
    	public static void main(String[]args)
    	{
    		String name="java.awt.Button";
    
    		try {
    			Class cl=Class.forName(name);
    			Class supercl=cl.getSuperclass();
    			String clmodifiers=Modifier.toString(cl.getModifiers());
    			if(clmodifiers.length()>0)
    				print(clmodifiers+" ");
    			print(name+" ");
    			if(supercl!=null&&supercl!=Object.class)
    				println("extends "+supercl.getName());
    			println("{");
    			
    			
    			printField(cl);
    			println("");
    			printConstructor(cl);
    			println("");
    			printMethods(cl);
    			println("}");
    			
    			
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		
    	}
    	//打印所有构造器信息
    	public static void printConstructor(Class cl)
    	{
    		Constructor[]constructors=cl.getConstructors();
    		for(Constructor c:constructors)
    		{
    			String name=c.getName();
    			print("	");
    			String modifer=Modifier.toString(c.getModifiers());
    			if(modifer.length()>0)
    				print(modifer+" ");
    			print(name+"(");
    			
    			
    			Class []parmTypes=c.getParameterTypes();
    			for(int i=0;i<parmTypes.length;i++)
    			{
    				if(i>0)print(", ");
    				print(parmTypes[i].getTypeName());
    			}
    			println(");");
    		}
    	}
    	//打印所有方法信息
    	public static void printMethods(Class cl)
    	{
    		Method []methods=cl.getDeclaredMethods();
    		
    		for(Method c:methods)
    		{
    			String name=c.getName();
    			print("	");
    			String modifer=Modifier.toString(c.getModifiers());
    			if(modifer.length()>0)
    				print(modifer+" ");
    			print(name+"(");
    			
    
    			Class []parmTypes=c.getParameterTypes();
    			for(int i=0;i<parmTypes.length;i++)
    			{
    				if(i>0)print(", ");
    				print(parmTypes[i].getTypeName());
    			}
    			println(");");
    		}
    	}
    	//打印类域信息
    	public static void printField(Class cl)
    	{
    		Field []fields=cl.getFields();
    		for(Field f:fields)
    		{
    			Class typeClass=f.getType();
    			String name=f.getName();
    			print("	");
    			String modifier=Modifier.toString(f.getModifiers());
    			if(modifier.length()>0)
    			print(modifier+" ");
    			println(typeClass.getName()+" "+name+" ");
    		}
    	}
    
    }
    


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    博客新域名www.tecchen.tech
    [转载]Redis 持久化之RDB和AOF
    基于zookeeper集群的云平台-配置中心的功能设计
    22部漫威电影大合集和观影顺序
    类的嵌套定义、使用以及用头文件实现多个文件编程(匠心之作C++ p105 22 )
    Python的print格式
    Tensorflow2.0+Anaconda + Windows10+cuda10.0+python(转自豌豆代理)
    C语言中用scanf连续输入两个字符类型的问题(转)
    算法和流程图(及N-S流程图)
    git的安装及针对码云的操作(二)
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768435.html
Copyright © 2011-2022 走看看