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具有了更...
- 创建通用成员变量`Object`,并提供构造方法。 - 在`invoke`方法中实现具体的业务逻辑。 - 编写创建代理类的方法`getProxy`,使用`Proxy.newProxyInstance()`。 - 创建代理类的工厂类。 - 使用方式:通过代理...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...
例如,可以使用`getMethods()`获取类的所有公共方法,使用`getField()`获取字段,或者使用`getConstructors()`获取构造函数。反射API还提供了调用方法(`invoke()`)和设置/获取字段值(`set()`和`get()`)的功能。 ...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...
可以使用Class类来获取类的各种信息,如类名、构造方法、成员变量等。 - **Field类**:表示类的成员变量。通过Field对象可以获取或设置成员变量的值。 - **Method类**:表示类的方法。可以通过Method对象来调用对象...
2. 使用`getDeclaredFields()`方法获取类的所有字段,包括私有字段。 3. 遍历每个字段,设置可访问性(`setAccessible(true)`),以跳过私有访问控制。 4. 检查字段类型,如果是基本类型,直接赋值;如果是引用类型...
- `getConstructors()`:获取类的所有公共构造方法。 - `getConstructor(Class<?>... parameterTypes)`:根据参数类型获取特定的构造方法。 - `newInstance()`:通过无参构造器创建类的新实例。 3. **反射的应用...
Java反射机制是Java编程语言中的一个核心特性,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制提供了对Java类和对象的底层访问,使得开发者能够在不知道对象具体类型的情况下创建和操作对象,增加了...
5. 字段:`Field`类代表类的成员变量,使用`getFields()`和`getDeclaredFields()`方法获取。 利用反射,我们可以执行以下操作: 1. 动态创建对象:通过Class对象的`newInstance()`方法,可以不使用`new`关键字创建...
Java反射(Reflect)是Java语言中的一个重要特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至动态调用方法。在Java编程中,反射提供了强大的能力,可以用来实现一些高级功能,如元编程、...
4. **`Constructor`类**:表示类的构造方法,同样通过`Class`对象获取`Constructor`对象,使用`newInstance()`方法创建新实例。 5. **`Array`类**:提供了操作数组的方法,如创建数组和访问数组元素。 #### 四、...
Java反射机制是Java编程语言中的一个核心特性,它允许运行中的程序访问并操作类和对象的信息,包括类的私有属性、方法以及构造器等,即使这些信息在编译时并未明确知晓。这一机制为Java提供了强大的动态性,极大地...
反射机制的核心在于`Class`类,它是Java语言中所有类的通用表示。以下是关于Java反射常用方法的详细说明: 1. **获取Class对象**: - `Class.forName(String className)`: 通过完全限定类名(包名+类名)获取对应...
3. 获取类的成员变量和方法信息。 4. 运行时调用对象的方法。 5. 创建动态代理。 3.2.3 **Java反射机制的相关API** - `java.lang.Class`: 表示类的运行时信息。 - `java.lang.reflect.Constructor`: 提供类构造器的...
通过Class对象,可以获取关于类的详细信息,比如构造函数、成员变量、方法等。 在Java中,Class类实现了Serializable、GenericDeclaration、Type、AnnotatedElement等接口,这些接口使得Class对象能够被序列化、...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理元数据、插件系统、以及创建...