利用反射——查看类的成员

在一个类的内部,一般包括成员变量、构造方法、普通方法和内部类等

public class ClassViewer {

	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws ClassNotFoundException {
		Class<?> clazz = Class.forName("java.util.ArrayList");
		System.out.println("类的标准名称:"+clazz.getCanonicalName());
		//获得该类对象的所有构造方法
		Constructor[] constructors = clazz.getConstructors();
		System.out.println("类的构造方法:");
		if (constructors.length!=0) {
			for (Constructor constructor : constructors) {
				System.out.println("\t"+constructor);
			}
		}else {
			System.out.println("\t空");
		}
		//获得该类对象的所有非继承域
		Field[] fields = clazz.getDeclaredFields();
		System.out.println("类的非继承域变量:");
		if (fields.length != 0) {
			for (Field field : fields) {
				System.out.println("\t"+field);
			}
		}else {
			System.out.println("\t空");
		}

		//获得该类对象的所有非继承方法
		Method[] methods = clazz.getDeclaredMethods();
		System.out.println("类的非继承方法:");
		if (methods.length != 0) {
			for (Method method : methods) {
				System.out.println("\t"+method);
			}
		}else {
			System.out.println("\t空");
		}
	}

}

输出结果如下:

类的标准名称:java.util.ArrayList
类的构造方法:
	public java.util.ArrayList(java.util.Collection)
	public java.util.ArrayList()
	public java.util.ArrayList(int)
类的非继承域变量:
	private static final long java.util.ArrayList.serialVersionUID
	private static final int java.util.ArrayList.DEFAULT_CAPACITY
	private static final java.lang.Object[] java.util.ArrayList.EMPTY_ELEMENTDATA
	private transient java.lang.Object[] java.util.ArrayList.elementData
	private int java.util.ArrayList.size
	private static final int java.util.ArrayList.MAX_ARRAY_SIZE
类的非继承方法:
	public void java.util.ArrayList.add(int,java.lang.Object)
	public boolean java.util.ArrayList.add(java.lang.Object)
	public java.lang.Object java.util.ArrayList.remove(int)
	public boolean java.util.ArrayList.remove(java.lang.Object)
	public java.lang.Object java.util.ArrayList.get(int)
	public java.lang.Object java.util.ArrayList.clone()
	public int java.util.ArrayList.indexOf(java.lang.Object)
	public void java.util.ArrayList.clear()
	public boolean java.util.ArrayList.contains(java.lang.Object)
	public boolean java.util.ArrayList.isEmpty()
	public int java.util.ArrayList.lastIndexOf(java.lang.Object)
	public int java.util.ArrayList.size()
	public java.util.List java.util.ArrayList.subList(int,int)
	public java.lang.Object[] java.util.ArrayList.toArray()
	public java.lang.Object[] java.util.ArrayList.toArray(java.lang.Object[])
	static int java.util.ArrayList.access$100(java.util.ArrayList)
	static java.lang.Object[] java.util.ArrayList.access$200(java.util.ArrayList)
	public boolean java.util.ArrayList.addAll(java.util.Collection)
	public boolean java.util.ArrayList.addAll(int,java.util.Collection)
	public java.util.Iterator java.util.ArrayList.iterator()
	private void java.util.ArrayList.readObject(java.io.ObjectInputStream) throws java.io.IOException,java.lang.ClassNotFoundException
	private void java.util.ArrayList.writeObject(java.io.ObjectOutputStream) throws java.io.IOException
	public java.lang.Object java.util.ArrayList.set(int,java.lang.Object)
	public void java.util.ArrayList.ensureCapacity(int)
	public void java.util.ArrayList.trimToSize()
	private void java.util.ArrayList.ensureCapacityInternal(int)
	java.lang.Object java.util.ArrayList.elementData(int)
	private void java.util.ArrayList.grow(int)
	private static int java.util.ArrayList.hugeCapacity(int)
	public java.util.ListIterator java.util.ArrayList.listIterator(int)
	public java.util.ListIterator java.util.ArrayList.listIterator()
	public boolean java.util.ArrayList.removeAll(java.util.Collection)
	protected void java.util.ArrayList.removeRange(int,int)
	public boolean java.util.ArrayList.retainAll(java.util.Collection)
	private java.lang.String java.util.ArrayList.outOfBoundsMsg(int)
	private void java.util.ArrayList.rangeCheckForAdd(int)
	private boolean java.util.ArrayList.batchRemove(java.util.Collection,boolean)
	private void java.util.ArrayList.ensureExplicitCapacity(int)
	private void java.util.ArrayList.fastRemove(int)
	private void java.util.ArrayList.rangeCheck(int)
	static void java.util.ArrayList.subListRangeCheck(int,int,int)
时间: 2024-10-26 09:06:20

利用反射——查看类的成员的相关文章

利用反射——查看类的声明

/** *类的声明包括常见修饰符(public.protected.private.abstract.statc.final等). * 类的名称.类的泛型参数.类的集成类(实现的接口)和类的注解等 * Class类的实例表示正在运行的Java应用程序中的类和接口. * 枚举是一种类,注解是一种接口 * 每个数组属于被映射为Class对象的一个类,所有具有相同元素类型和维数的数组都共享该Class对象. * Java的基本类型和关键字void也表示为Class对象,但没有构造方法 * Class对

利用反射更新类

#region 利用反射更新类 /// <summary> /// 利用反射更新类 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <param name="db"></param> public static void

通过反射查看类信息

通过反射查看类信息 1.获得Class对象的三个方式 (1)使用Class类的forName(String clazzName)静态方法.该方法需要传入字符串参数,该字符串参数的值是某个类的全限定名(必须添加完整的包名): //例如在JDBC中加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); (2)调用某个类的class属性来获取该类对应的Class对象: //假设现有Student类 //调用该类的class属性获取Class对象 Cla

Java反射(二)利用反射分析类的能力

利用反射分析类能力的类的源码如下(来源于<Java核心技术>卷一): package testreflection; import java.util.*; import java.lang.reflect.*; /** * 这个类利用反射打印出一个类的所有特征 * * @version 1.1 2004-02-21 * @author Cay Horstmann */ public class ReflectionTest { public static void main(String[]

通过Java反射测试类私有成员

在Java开发阶段,因为追求架构规范和遵循设计原则,所以要用private和protected修饰符去定义类的成员方法.变量.常量,这使得代码具封装性.内聚性等,但在测试阶段会造成一定的不便.通过Java的反射机制,便能很好地解决该问题. ReflectUtil.java //...... /** * @author yumin * @since 2015-03-02 14:52 */ public class ReflectUtil { private ReflectUtil() { } //

读取配置文件,利用反射给类属性赋值,

背景:项目中用的全局变量,一般通过形如 pubic static final String ABC="abc";然后在项目中用类.属性名的方式调用. 如果变量的值并不固定.比如不同客户定义的值不同,就不能用final修饰.只能用public static String ABC;方式来声明,也可加默认初始值: 这个时候我们就需要一个初始化方法(init())来对变量进行初始化赋值,让其变得有意义. 因为值需要从配置文件中读取,传统方法,可能是根据属性的set方法一个一个设置.假如有10个

利用反射来实现获取成员的指定特性(Attribute)信息

在开发过程中,我们经常需要自定义一些特性,来辅助我们完成对对象或者枚举进行管理.我们需要知道如何获取对象使用的特性信息. 以下举个学习用的例子. 我们自定义一个特性类,这个特性设置在一个数据段内是否执行使用这个特性的方法,特性如下 [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)] public class ExcuceAttribute : Attribute { public

通过Java反射测试类私有成员(新)

http://my.oschina.net/wangyumin/blog/387627续上篇反射方式调用私有成员,最近对该方法进行了二次封装. ReflectUtil.java //部份代码略 /** * Invoking method plus * * @param object Java object * @param methodName 方法名称 * @param args 入参对象 * @return 执行结果对象 */ public static Object invokeMetho

利用反射实现类通用的DAO层

public void add(Object object) throws SQLException { ResultSet rs=null; PreparedStatement ps=null; Connection con=null; //获取表名 Class c= object.getClass(); String className=c.getName(); String declareName=className.substring(className.lastIndexOf(".&q