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


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

  • 相关阅读:
    iOS
    2016-北京游线路规划
    OC 组合实现多继承
    如何把项目托管到GitHub
    iOS6和iOS7代码的适配(2)——status bar
    iOS6和iOS7代码的适配(1)
    Xcode ARC需要什么版本的环境支持
    内容页直接输出图集函数及使用方法
    vue-cli如何引入bootstrap工具
    实现Sublime Text3中vue文件高亮显示的最有效的方法
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768435.html
Copyright © 2011-2022 走看看