gpt4 book ai didi

java - 使用 .newInstance() 和不使用有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:32 27 4
gpt4 key购买 nike

我看到很多 java 示例连接到数据库,调用 newInstance()。有些人根本不使用它。我都试过了并且工作正常。我不明白为什么有些用有些不用?

...
Class.forName("com.mysql.jdbc.Driver").newInstance();
...
...
Class.forName("com.mysql.jdbc.Driver");
...

最佳答案

现代 Java 中,这些都不需要。

在“过去的美好时光”中使用 Class.forName 的原因是它会运行类型初始化代码,这会向 JDBC 注册驱动程序。不过,您不需要创建驱动程序的新实例,因此您的第一个示例永远不需要。

但是,现在不需要 - DriverManager使用标准的服务提供者机制来查找驱动程序。如果现在看到任何不支持此功能的生产质量驱动程序,我会感到很惊讶。

其他情况下,您可能会看到调用 Class.forName() 的代码有或没有 newInstance(),这两个是单独的调用:

  • Class.forName(String) 是一种静态方法,它查找/加载具有指定完全限定名称的 Class 对象...就像您在编译时使用了 Foo.class,但不知道名称 Foo
  • Class.newInstance() 是一个实例方法,它创建由作为方法目标的 Class 对象表示的类的新实例,调用无参数构造函数。所以 Foo.class.newInstance() 有点像 new Foo() - 不过,你不需要知道 Foo在编译时(例如,如果您通过 Class.forName 获得了一个 Class 引用,或者接受它作为方法参数)

关于java - 使用 .newInstance() 和不使用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com