文档章节

Java反射输出类的全部信息

wenqi_arthur
 wenqi_arthur
发布于 2015/08/19 11:06
字数 250
阅读 46
收藏 6
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ReflectionDemo {

	public static void main(String[] args) throws ClassNotFoundException {
		String classNameStr ="java.lang.String";
		//String classNameStr ="java.lang.Double";
		Class<?> cls =Class.forName(classNameStr);
		
		Class<?> superCls =cls.getSuperclass();
		
		String modifier =Modifier.toString(cls.getModifiers());
		if (modifier.length()>0) {
			//输出类修饰词
			System.out.print(modifier+"");
		}
		//输出类名
		System.out.print("class "+classNameStr);
		
		//输出父类
		if (superCls != null && superCls != Object.class) {
			System.out.print(" extends "+superCls.getName());
		}
		
		System.out.print("\n{\n");
		
		printConstrctors(cls);
		System.out.println();
		
		printMethods(cls);
		System.out.println();
		
		printFields(cls);
		System.out.println("}");
	}
/**
 * 输出属性
 * @param cls
 */
	private static void printFields(Class<?> cls) {
		Field[] fields = cls.getDeclaredFields();
		
		for (Field f : fields) {
			Class<?> fType = f.getType();
			String fName = f.getName();
			System.out.print("    ");
			String modifiers = Modifier.toString(f.getModifiers());
			if (modifiers.length()>0) {
				System.out.print(modifiers+" ");
			}
			System.out.println(fType.getName()+" "+fName+";");
		}
	}
/**
 * 输出方法
 * @param cls
 */
	private static void printMethods(Class<?> cls) {
		Method[] methods = cls.getDeclaredMethods();
		
		for(Method m : methods){
			Class<?> retType = m.getReturnType();
			String methodName = m.getName();
			System.out.print("    ");
			String modifiers = Modifier.toString(m.getModifiers());
			if(modifiers.length()>0){
				System.out.print(modifiers+" ");
			}
			
			System.out.print(retType+" "+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(");");
		}
	}

	/**
	 * 输出构造函数
	 * @param cls
	 */
	private static void printConstrctors(Class<?> cls) {
		Constructor<?>[] constructors =cls.getDeclaredConstructors();
		
		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 i = 0; i < paramTypes.length; i++) {
				if (i>0) {
					System.out.print(", ");
				}
				System.out.print(paramTypes[i].getName());
			}
			System.out.println(")");
		}
	}

}


© 著作权归作者所有

wenqi_arthur
粉丝 17
博文 69
码字总数 4580
作品 0
广州
私信 提问
Java基础之反射(非常重要)

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道...

Java-老刘
2018/05/15
306
0
Java中的反射|SquirrelNote

前言 本篇简介: 反射概述 反射具体功能实现 Android中的反射应用 一、反射(Reflection)概述 1.定义 是指在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;并且对于任何一个...

跳动的松鼠
2017/11/28
0
0
Java反射机制

问题: 在运行时,对一个JAVA类,能否知道属性和方法;能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现。 目录 什么是JAVA的反射机制 JDK中提供的Reflection API JAVA反...

长平狐
2012/08/29
585
0
老司机带你深入浅出Java反射

反射,它就像是一种魔法,引入运行时自省能力,赋予了 Java 语言令人意外的活力,通过运行时操作元数据或对象,Java 可以灵活地操作运行时才能确定的信息 这里笔者就深入浅出总结下Java反射,...

小刀爱编程
2018/11/07
118
0
Java反射机制(未完成,还缺最后一个)

1、背景 1)Reflection也就是反射 是Java被视为动态(或准动态)语言的一个关键性质 2)反射机制指的是程序在运行时能够获取任何类的内部所有信息 2、实现功能概述 1)只要给定类的全名,即可...

萧小蚁
2015/05/03
256
0

没有更多内容

加载失败,请刷新页面

加载更多

DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
19分钟前
0
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
4
0
Python机器学习之数据探索可视化库yellowbrick

背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维。陆续使用过plotly、seaborn,...

yeayee
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部