| Name | SuperClass | Constructor | Field | Method |
获取 | getName getSimpleName | getSuperClass | getConstructor getDeclaredConstructor+setAccessible getConstructors | getField getDeclaredFields+setAccessible getFields | |
使用 | | | (Class) newInstance | set set* get get* | invoke |
getX和getXs都只能获取public的构造函数、成员变量、成员函数。
如果需要使用protected/private的,需要使用getDeclaredX+setAccessible()禁用安全检查。
此外,对于静态元素,使用的时候第一个参数object传null即可。
Java Code
| package com.bjsxt.test; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import com.bjsxt.test.bean.User; public class Test { public static void main(String[] args) { String path="com.bjsxt.test.bean.User"; try { Class<?> clazz = Class.forName(path); System.out.println(clazz.getName()); System.out.println(clazz.getSimpleName()); clazz.getSuperclass(); //获取所有public的构造函数 Constructor<?>[] constructors = clazz.getConstructors(); for (Constructor<?> constructor2 : constructors) { System.out.println(constructor2); } Constructor<?> constructor = clazz.getDeclaredConstructor(int.class, int.class, String.class ); User user=(User)constructor.newInstance(1, 18, "shadowfaxghh"); System.out.println(user.getUname()); //也可以直接使用class.newInstance(),此时会调用默认的无参构造方法,因为此时为private,故会报java.lang.IllegalAccessException // User user2=(User)clazz.newInstance(); Field declaredField = clazz.getDeclaredField("uname"); declaredField.setAccessible(true); declaredField.set(user, "abcde"); System.out.println(declaredField.get(user)); Method declaredMethod = clazz.getDeclaredMethod("setUname", String.class); declaredMethod.invoke(user, "xxx"); declaredMethod.setAccessible(true); System.out.println(user.getUname()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } } } |