`
ysong_summer
  • 浏览: 16613 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java反射通用类 获取所有成员变量 构造方法 成员方法

阅读更多
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ReflectUtil {

	public static void main(String[] args) {
		try {
			String classNameString = "java.lang.Math";
			Class c = Class.forName(classNameString);

			reflectDeclaredFields(c);
			System.out.println("\n");
			reflectDeclaredConstructors(c);
			System.out.println("\n");
			reflectDeclaredMethods(c);

			reflectFields(c);
			System.out.println("\n");
			reflectConstructors(c);
			System.out.println("\n");
			reflectMethods(c);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 反射所有变量
	 * 
	 * @param c
	 */
	public static void reflectDeclaredFields(Class c) {
		try {
			Field[] fields = c.getDeclaredFields();
			System.out.println("this class has " + fields.length + " field");
			for (Field field : fields) {
				System.out.println(Modifier.toString(field.getModifiers()) + " " + field.getType().getSimpleName() + " "
						+ field.getName());
				// System.out.println(field);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void reflectFields(Class c) {
		try {
			Field[] fields = c.getFields();
			System.out.println("this class has " + fields.length + " field");
			for (Field field : fields) {
				System.out.println(Modifier.toString(field.getModifiers()) + " " + field.getType().getSimpleName() + " "
						+ field.getName());
				// System.out.println(field);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 反射所有构造方法
	 * 
	 * @param c
	 */
	public static void reflectDeclaredConstructors(Class c) {
		try {
			Constructor[] constructors = c.getDeclaredConstructors();
			System.out.println("this class has " + constructors.length + " constructor");
			for (Constructor constructor : constructors) {
				StringBuilder sb = new StringBuilder(
						Modifier.toString(constructor.getModifiers()) + " " + constructor.getName() + "(");
				Class[] types = constructor.getParameterTypes();
				if (types.length > 0) {
					for (Class type : types) {
						sb.append(type.getSimpleName() + ",");
					}
					sb.deleteCharAt(sb.length() - 1);
				}
				sb.append(")");
				System.out.println(sb);
				// System.out.println(constructor);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void reflectConstructors(Class c) {
		try {
			Constructor[] constructors = c.getConstructors();
			System.out.println("this class has " + constructors.length + " constructor");
			for (Constructor constructor : constructors) {
				StringBuilder sb = new StringBuilder(
						Modifier.toString(constructor.getModifiers()) + " " + constructor.getName() + "(");
				Class[] types = constructor.getParameterTypes();
				if (types.length > 0) {
					for (Class type : types) {
						sb.append(type.getSimpleName() + ",");
					}
					sb.deleteCharAt(sb.length() - 1);
				}
				sb.append(")");
				System.out.println(sb);
				// System.out.println(constructor);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 反射所有成员方法
	 * 
	 * @param c
	 */
	public static void reflectDeclaredMethods(Class c) {
		try {
			Method[] methods = c.getDeclaredMethods();
			System.out.println("this class has " + methods.length + " method");
			for (Method method : methods) {
				StringBuilder sb = new StringBuilder(Modifier.toString(method.getModifiers()) + " "
						+ method.getReturnType().getSimpleName() + " " + method.getName() + "(");
				Class[] types = method.getParameterTypes();
				if (types.length > 0) {
					for (Class type : types) {
						sb.append(type.getSimpleName() + ",");
					}
					sb.deleteCharAt(sb.length() - 1);
				}
				sb.append(")");
				System.out.println(sb);
				// System.out.println(method);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void reflectMethods(Class c) {
		try {
			Method[] methods = c.getDeclaredMethods();
			System.out.println("this class has " + methods.length + " method");
			for (Method method : methods) {
				StringBuilder sb = new StringBuilder(Modifier.toString(method.getModifiers()) + " "
						+ method.getReturnType().getSimpleName() + " " + method.getName() + "(");
				Class[] types = method.getParameterTypes();
				if (types.length > 0) {
					for (Class type : types) {
						sb.append(type.getSimpleName() + ",");
					}
					sb.deleteCharAt(sb.length() - 1);
				}
				sb.append(")");
				System.out.println(sb);
				// System.out.println(method);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

 

分享到:
评论

相关推荐

    JAVA反射机制详解视频

    (通过反射获取无参构造方法并使用) (通过反射获取带参构造方法并使用) (通过反射获取私有构造方法并使用) (通过反射获取成员变量并使用) (通过反射获取无参无返回值成员方法并使用) (通过反射获取带参带返回值成员...

    Java反射调用方法

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息,包括但不限于获取类的方法、字段、构造器等,并能动态调用方法和修改字段值。这个特性使得Java具有了更...

    java反射.pdf

    - 创建通用成员变量`Object`,并提供构造方法。 - 在`invoke`方法中实现具体的业务逻辑。 - 编写创建代理类的方法`getProxy`,使用`Proxy.newProxyInstance()`。 - 创建代理类的工厂类。 - 使用方式:通过代理...

    Java反射机制经典案例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...

    候捷谈Java反射机制

    例如,可以使用`getMethods()`获取类的所有公共方法,使用`getField()`获取字段,或者使用`getConstructors()`获取构造函数。反射API还提供了调用方法(`invoke()`)和设置/获取字段值(`set()`和`get()`)的功能。 ...

    Java反射机制总结(实例分析)

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...

    java反射机制详解

    可以使用Class类来获取类的各种信息,如类名、构造方法、成员变量等。 - **Field类**:表示类的成员变量。通过Field对象可以获取或设置成员变量的值。 - **Method类**:表示类的方法。可以通过Method对象来调用对象...

    使用java反射机制实现java的深拷贝

    2. 使用`getDeclaredFields()`方法获取类的所有字段,包括私有字段。 3. 遍历每个字段,设置可访问性(`setAccessible(true)`),以跳过私有访问控制。 4. 检查字段类型,如果是基本类型,直接赋值;如果是引用类型...

    java反射机制.pdf

    - `getConstructors()`:获取类的所有公共构造方法。 - `getConstructor(Class<?>... parameterTypes)`:根据参数类型获取特定的构造方法。 - `newInstance()`:通过无参构造器创建类的新实例。 3. **反射的应用...

    Java反射机制

    Java反射机制是Java编程语言中的一个核心特性,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制提供了对Java类和对象的底层访问,使得开发者能够在不知道对象具体类型的情况下创建和操作对象,增加了...

    java反射

    5. 字段:`Field`类代表类的成员变量,使用`getFields()`和`getDeclaredFields()`方法获取。 利用反射,我们可以执行以下操作: 1. 动态创建对象:通过Class对象的`newInstance()`方法,可以不使用`new`关键字创建...

    java反射(reflect)

    Java反射(Reflect)是Java语言中的一个重要特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至动态调用方法。在Java编程中,反射提供了强大的能力,可以用来实现一些高级功能,如元编程、...

    Java语言的反射机制

    4. **`Constructor`类**:表示类的构造方法,同样通过`Class`对象获取`Constructor`对象,使用`newInstance()`方法创建新实例。 5. **`Array`类**:提供了操作数组的方法,如创建数组和访问数组元素。 #### 四、...

    pdf反射机制-java

    Java反射机制是Java编程语言中的一个核心特性,它允许运行中的程序访问并操作类和对象的信息,包括类的私有属性、方法以及构造器等,即使这些信息在编译时并未明确知晓。这一机制为Java提供了强大的动态性,极大地...

    Java中反射的常用方法总结

    反射机制的核心在于`Class`类,它是Java语言中所有类的通用表示。以下是关于Java反射常用方法的详细说明: 1. **获取Class对象**: - `Class.forName(String className)`: 通过完全限定类名(包名+类名)获取对应...

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    3. 获取类的成员变量和方法信息。 4. 运行时调用对象的方法。 5. 创建动态代理。 3.2.3 **Java反射机制的相关API** - `java.lang.Class`: 表示类的运行时信息。 - `java.lang.reflect.Constructor`: 提供类构造器的...

    JAVA反射机制

    通过Class对象,可以获取关于类的详细信息,比如构造函数、成员变量、方法等。 在Java中,Class类实现了Serializable、GenericDeclaration、Type、AnnotatedElement等接口,这些接口使得Class对象能够被序列化、...

    Java 反射

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理元数据、插件系统、以及创建...

Global site tag (gtag.js) - Google Analytics