当前位置: 首页 > 面试题库 >

为什么Class.newInstance()是“evil”?

杨研
2023-03-14
问题内容

为什么Class.newInstance()是“邪恶的”?

这是对代码示例的响应:

// Avoid Class.newInstance, for it is evil.
Constructor<? extends Runnable> ctor = runClass.getConstructor();
Runnable doRun = ctor.newInstance();

那么,为什么它是邪恶的?


问题答案:

Java API文档解释了原因(http://java.sun.com/javase/6/docs/api/java/lang/Class.html#newInstance()):

请注意,此方法传播由nullary构造函数引发的所有异常,包括已检查的异常。这种方法的使用有效地绕过了编译时异常检查,否则该检查将由编译器执行。该Constructor.newInstance方法通过将构造函数抛出的所有异常包装在(选中)中来避免此问题InvocationTargetException

换句话说,它可以使检查异常系统失效。



 类似资料:
  • 问题内容: 和之间有什么区别?它们都创建一个类的实例,我不确定它们之间有什么区别。 问题答案: 在操作创建一个是静态已知的(在编译时),并可以调用你想创建对象的任何构造一个类型的新对象。这是创建对象的首选方式- 快速且JVM对它进行了许多积极的优化。 是一个动态构造,用于查找具有特定名称的类。它比使用速度慢,因为无法将对象的类型硬编码到字节码中,并且因为JVM可能必须执行权限检查以确保您有权创建对

  • 根据此MIPS指令参考,有两条指令(

  • Blade是无意间起的一个名字,始于 2015 年 9 月,目的为个人开发者提供一个除 Spring 系列框架的一个选择。 学习 Blade 搭建 Web 程序,只需要 1 小时,如果你是一个Web开发的老手,也许20分钟就够了。 Blade 是什么? 一个高效的 MVC 开发框架 是一个自带WebServer的库 帮助开发者快速构建Web程序 源代码不到 500KB 的开源框架 简洁优雅的 AP

  • Bootstrapping(引导) 是 Netty 中配置程序的过程,当你需要连接客户端或服务器绑定指定端口时需要使用 Bootstrapping。 如前面所述,Bootstrapping 有两种类型,一种是用于客户端的Bootstrap,一种是用于服务端的ServerBootstrap。不管程序使用哪种协议,无论是创建一个客户端还是服务器都需要使用“引导”。 面向连接 vs. 无连接 请记住,这

  • 问题内容: 什么是反射,为什么有用? 我对Java特别感兴趣,但是我认为原理在任何语言中都是相同的。 问题答案: 名称反射用于描述能够检查同一系统(或本身)中的其他代码的代码。 例如,假设您在Java中有一个未知类型的对象,并且想在该对象上调用“ doSomething”方法(如果存在)。除非对象符合已知的接口,否则Java的静态类型化系统并不是真正为支持该类型而设计的,但是使用反射,您的代码可以

  • 问题内容: 我了解JSON,但不了解JSONP。Wikipedia上有关JSON的文档是JSONP的最高搜索结果。它说: JSONP或“带填充的JSON”是JSON扩展,其中将前缀指定为调用本身的输入参数。 ??什么电话 这对我来说毫无意义。JSON是一种数据格式。没有电话 在第二个搜索结果是由某些人叫雷米,谁写的这个约JSONP: JSONP是脚本标记注入,它将响应从服务器传递到用户指定的函数。