好处:
- 灵活
- 可以在运行时再去确定要创建对象的类型
坏处:
难以理解
使用无参构造器创建对象
Scanner in = new Scanner(System.in);
System.out.println("请输入你要创建对象的全类名");
String className = in.next();
//获取对应的Class对象
Class clazz = Class.forName(className);
//创建对象了
Object o = clazz.newInstance();
Object o = class.newInstance();
相当于 调用了对应类型的无参构造器
调用有参构造器
Scanner in = new Scanner(System.in);
System.out.println("请输入你要创建对象的全类名");
String className = in.next();
//获取对应的Class对象
Class clazz = Class.forName(className);
//获取构造器
//获取一个参数的构造器,放的是参数的Class
Constructor constructor = clazz.getConstructor(String.class);
//执行构造器 创建对象了
Object instance = constructor.newInstance("杜甫");
此处的方法的参数是可变形参
getConstructor()
newInstance()
**若获取的构造器 非 public
**
-
要使用
getDeclaredConstructor()
-
设置私有的构造器可以访问的
构造器对象.setAccessible(true);
运行时改变
在程序还没调用
构造器对象.setAccessible(false);
之前,在同一程序内还可以调用私有构造器