0%

java反射学习笔记

获取类对象

动态加载一个类

1
2
3
URL[] urls = new URL[] {new URL("file:.\\out\\production\\java_reflect")};
URLClassLoader classLoader = new URLClassLoader(urls);
Class clazz = classLoader.loadClass("test.reflect.User");

寻找一个类

1
Class clazz = Class.forName("test.reflect.User");

获取类中的构造方法

1
2
3
4
5
Constructor constructor1=clazz.getConstructor();
User user1 = (User) constructor1.newInstance();

Constructor constructor2=clazz.getConstructor(String.class, String.class);
User user2 = (User) constructor2.newInstance("lili", "123456");

获取类中属性

获取类中公有属性

1
2
Field usernameField=clazz.getField("username");
usernameField.get(user2);

获取类中私有属性

1
2
3
Field passwordField=clazz.getDeclaredField("password");
passwordField.setAccessible(true);
passwordField.set(user2, "654321");

获取类中方法

1
Method getInfoMethod=clazz.getDeclaredMethod("getInfo", int.class);

调用方法

1
2
3
getInfoMethod.setAccessible(true);
String ret= (String) getInfoMethod.invoke(user2, 1);
System.out.println(ret);

调用静态方法

1
2
3
Method staticMethod=clazz.getDeclaredMethod("staticMethod");
staticMethod.setAccessible(true);
staticMethod.invoke(null);