🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 获取公共的构造方法数组 ~~~ Class user = Class.forName("User"); //获取所有公共权限(public)的构造方法 Constructor[] constructors = user.getConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor); } ~~~ ## 获取空参构造方法并运行 ~~~ Class user = Class.forName("User"); //获取指定的构造方法 Constructor constructor = user.getConstructor(); //运行空参构造方法 Object o = constructor.newInstance(); //获取User的实例 User u = (User) o; u.show(); ~~~ ## 获取有参构造方法并运行 ~~~ Class c = Class.forName("User"); //传递要获取的公共(public)构造方法的参数列表,这里的参数类型如果只写String,那么只是字符串.这里要传入类型的class文件对象.所以这里要传入String.class Constructor constructor = c.getConstructor(String.class); //运行构造方法,传递实际的参数 User u = (User) constructor.newInstance("jack"); System.out.println(u.getName()); ~~~ ## 反射获取构造方法并运行的快速方式 有个前提是被反射的类必须具有空参数构造方法.这个构造方法的权限必须是public. ~~~ Class c = Class.forName("User"); //直接创建被反射类的对象实例 Object o = c.newInstance(); System.out.println(o); ~~~ ## 获取私有构造方法并运行 不推荐,因为破坏了程序的封装性和安全性. ~~~ Class c = Class.forName("User"); //getDeclaredConstructors获取所有构造方法,包括私有的 //Constructor[] declaredConstructors = c.getDeclaredConstructors(); Constructor declaredConstructor = c.getDeclaredConstructor(String.class); //Constructor父类方法设置是否可访问,否则会报错.此方法在运行时关闭了java的访问检查(暴力反射) declaredConstructor.setAccessible(true); Object o = declaredConstructor.newInstance("jack"); System.out.println(o); ~~~