newinstance()和new的区别? (网上解答整理)

newinstance()和new的区别? (网上解答整理),第1张

概述       在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便 *** 作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的

       在Java开发特别是数据库开发中,经常会用到Class.forname( )这个方法。通过查询Java documentation我们会发现使用Class.forname( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便 *** 作。因此,单单使用Class.forname( )是动态加载类是没有用的,其最终目的是为了实例化对象。

首先,newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制。

Class.forname("")    //返回的是类Class.forname("").newInstance()   //返回的是object

那么问题来了:为什么在我们加载数据库驱动包的时候,有的jdbc连接数据库的写法里是Class.forname(xxx.xx.xx);而有一些写的是Class.forname(xxx.xx.xx).newInstance()?

 解答: 从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个 类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forname()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。

现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forname时获得更好的灵活性,提供给了一种降耦的手段。

最后用最简单的描述来区分new关键字和newInstance()方法的区别:
newInstance: 弱类型。低效率。只能调用无参构造。

new: 强类型。相对高效。能调用任何public构造

总结

以上是内存溢出为你收集整理的newinstance()和new的区别? (网上解答整理)全部内容,希望文章能够帮你解决newinstance()和new的区别? (网上解答整理)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1159485.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存