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

Bal*_*ala 5 java

我看到很多java示例连接到db,进行调用newInstance().有些人根本不使用它.我试过两个并且工作正常.我不明白为什么有些用,有些不用?

...
Class.forName("com.mysql.jdbc.Driver").newInstance();
...
...
Class.forName("com.mysql.jdbc.Driver");
...
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

现代 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通过引用Class.forName,或接受它作为一个方法参数)