Java 反射: 获取 String 类信息并调用方法和构造函数
import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Main {public static void main(String[] args) throws Exception {Class<? > stringClass = String.class;Method[] methods = stringClass.getDeclaredMethods();System.out.println("String类的所有方法:");for (Method method : methods) {System.out.println(method.getName());}Constructor<? >[] constructors = stringClass.getDeclaredConstructors();System.out.println("String类的所有构造方法:");for (Constructor<? > constructor : constructors) {System.out.println(constructor.getName());}Field[] fields = stringClass.getDeclaredFields();System.out.println("String类的所有变量:");for (Field field : fields) {System.out.println(field.getName());}System.out.println("调用String的构造方法:");Constructor<? > constructor = stringClass.getConstructor(String.class);String str1 = (String) constructor.newInstance("Hello");System.out.println(str1);constructor = stringClass.getConstructor(char[].class);String str2 = (String) constructor.newInstance(new char[]{'W', 'o', 'r', 'l', 'd'});System.out.println(str2);constructor = stringClass.getConstructor(byte[].class, int.class, int.class);String str3 = (String) constructor.newInstance(new byte[]{65, 66, 67, 68, 69}, 1, 3);System.out.println(str3);constructor = stringClass.getConstructor(StringBuffer.class);String str4 = (String) constructor.newInstance(new StringBuffer("Java"));System.out.println(str4);constructor = stringClass.getConstructor(StringBuilder.class);String str5 = (String) constructor.newInstance(new StringBuilder("Programming"));System.out.println(str5);System.out.println("调用String的方法:");Method method = stringClass.getMethod("length");int length = (int) method.invoke(str1);System.out.println("length: " + length);method = stringClass.getMethod("toUpperCase");String upperCase = (String) method.invoke(str2);System.out.println("upperCase: " + upperCase);method = stringClass.getMethod("substring", int.class);String substring = (String) method.invoke(str3, 1);System.out.println("substring: " + substring);method = stringClass.getMethod("concat", String.class);String concat = (String) method.invoke(str4, " is fun");System.out.println("concat: " + concat);method = stringClass.getMethod("replace", char.class, char.class);String replace = (String) method.invoke(str5, 'm', 'M');System.out.println("replace: " + replace);System.out.println("修改String的变量:");Field field = stringClass.getDeclaredField("value");field.setAccessible(true);char[] value = (char[]) field.get(str1);value[0] = 'h';System.out.println(str1);
原文地址: https://www.cveoy.top/t/topic/qd8V 著作权归作者所有。请勿转载和采集!