1 获取运行时类的完整结构

2 动态创建对象
2.1 通过Class.newInstance()创建
package com.lht.reflection;public class TestReflection {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {Class clazz = Class.forName("com.lht.reflection.User");User user = (User) clazz.newInstance();System.out.println(user);}}// 实体类class User {private String name;private int id;public User() {}public User(String name, int id) {this.name = name;this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}@Overridepublic String toString() {return "com.lht.reflection.User{" +"name='" + name + '\'' +", id=" + id +'}';}}
com.lht.reflection.User{name='null', id=0}
本质上
Class.newInstance()调用的是User类的默认构造方法,如果将默认构造方法删除,则会报错。
2.2 通过获取类的构造器
- 通过
Class.getDeclaredConstructor(argType1, argType2, ...)获取想要的构造器constructor - 通过
constructor.newInstance(arg1, arg2, ...)动态创建类实例 ```java package com.lht.reflection;
import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException;
public class TestReflection { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { Class clazz = Class.forName(“com.lht.reflection.User”); Constructor constructor = clazz.getDeclaredConstructor(String.class, int.class); User user = (User) constructor.newInstance(“lirt”, 210224); System.out.println(user); } }
// 实体类,同上 class User { … } ```
