Class类相关方法
- newInstance:调用无参构造器,获取对应类的对象
- getConstructor(Class … clazz):根据参数列表,获取对应的 public 构造器
- getDeclaredConstructor(Class … clazz):根据参数列表,获取对应的 任意类型构造器
Constructor类相关方法
- setAccessible:暴破
- newInstance:调用构造器
反射创建对象
- .通过 public 的无参构造器创建实例
- 通过 public 的有参构造器创建实例
- 通过 private 的有参构造器创建实例
package com.ftn.reflection.question;
import java.lang.reflect.Constructor;
public class ReflectCreateInstance {
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("com.ftn.reflection.question.User");
Object o = cls.newInstance();
System.out.println("对象实例=" + o);
Constructor<?> constructor = cls.getConstructor(String.class);
Object o1 = constructor.newInstance("ftn");
System.out.println("对象实例=" + o1);
Constructor<?> declaredConstructor = cls.getDeclaredConstructor(String.class, int.class);
declaredConstructor.setAccessible(true);
Object o2 = declaredConstructor.newInstance("ftn",20);
System.out.println("对象实例=" + o2);
}
}
class User{
String name;
int age;
public User(){
}
public User(String name){
this.name = name;
}
private User(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}