
问题来源:《Java核心技术卷Ⅰ》(第11版)P200
在《Java核心技术卷Ⅰ》中提到的反射实例化方式,引发了笔者一个常见疑问:为什么不能直接使用cl.newInstance(),而需要先获取Constructor对象再调用newInstance()?本文将深入探讨其背后的设计逻辑和技术演进。
历史原因与过时方法
Class.newInstance() 是早期设计(Java 1.0 引入),它存在以下问题:
只能调用无参构造方法,如果类没有无参构造器,会直接抛出 InstantiationException。
异常处理不透明:如果构造方法本身抛出异常,Class.newInstance() 会将其包装成 InvocationTargetException 的父类异常,导致调试困难。
安全性问题:无法通过反射权限检查时,会直接抛出异常,而不会像 Constructor 方法那样提供更细粒度的控制。
Constructor.newInstance() 是改进方案(Java 1.2 引入):
支持调用任意参数类型的构造方法(需通过 getConstructor(Class ...

