java - 为什么 class.forName 有用

java - 为什么 class.forName 有用

您将看到的另一个重要用途是加载 JDBC 驱动程序。这可能是大多数 java 程序员第一次使用 Class.forName。你会看到是这样的:

Class.forName("oracle.jdbc.OracleDriver");

Connection connection = DriverManager.getConnection("jdbc:oracle:thin:...");

这里发生的是,当 OracleDriver 类被加载(通过 Class.forName)时,它包含一个类似这样的类初始化块(它可能更复杂,但说明了这一点)。该块作为类加载过程的一部分运行。

public class OracleDriver {

static {

DriverManager.registerDriver(new OracleDriver());

}

}

然后当你调用 DriverManager.getConnection 时,它会询问所有已注册的驱动程序是否能够处理给定的 url(代码比较复杂,但我会简化一下):

for (Driver driver : registeredDrivers) {

if (driver.acceptsURL(url)) {

// use this driver

}

}

至于您的实例化问题, Class.newInstance() 方法将始终调用无参数构造函数,如果不存在则抛出异常。如果你想要一个特定的构造函数,你可以在类本身上使用“getConstructor”方法。例如,如果你想要一个接受 String 和 Long 的构造函数:

Class clazz = ...; // figure out which class here

Constructor c = clazz.class.getConstructor(String.class, Long.class);

Object o = c.newInstance("foo", new Long(1L));

相关

迎接Broadwell桌面版 市售Z97主板推荐
亚洲28365

迎接Broadwell桌面版 市售Z97主板推荐

📅 07-01 👁️ 7953
殷字的成语有哪些
365投注入口

殷字的成语有哪些

📅 07-08 👁️ 3193
关晓彤牙齿凌乱程度不输换头前的baby 鹿晗都看不下去了