java中getInstance()和newInstance()的区别

小编 565

java中getInstance()和newInstance()的区别:1.创建模式不同;2.使用方法不同;3.使用条件不同。创建模式不同是指,getInstance为饿汉式,程序是直接创建出来,等待调用即可;而newInstance即为懒汉式,程序在使用时才创建。

1.模式不同

getInstance即为饿汉式,程序是直接创建出来,等待调用即可,且可以跨栈区域使用,或者远程跨区域使用;而newInstance即为懒汉式,程序什么时候使用什么时候创建,且创建后只能当次使用。

2.性质不同

getInstance是单例模式里获取单例的方法名称,你可以随意改。newInstance是java.lang.Class里的方法名,会调用构造方法构造新的实例。

3.用法不同

getInstance的使用:在主函数开始时调用,返回一个实例化对象,此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。

newInstance的使用:通过 Class 类的 newInstance() 方法创建对象,该方法要求该 Class 对应类有无参构造方法。执行 newInstance()方法实际上就是使用对应类的无参构造方法来创建该类的实例,其代码的作用等价于Super sup = new Super()。

4.使用条件不同

在使用newInstance()方法的时候,必须保证这个类已经加载并且已经连接了,而这可以通过Class的静态方法forName()来完成的。Java中工厂模式经常使用newInstance()方法来创建对象,

getInstance是少部分类才有的一个方法,各自的实现也不同。getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成少数的实例,getInstance往往是static的。

延伸阅读

java中new和newInstance的对比

new是java中的关键字,是创建一个新对象的关键字。用new这个关键字的话,是调用new指令创建一个对象,然后调用构造方法来初始化这个对象,如果反编译class的话,会看到一个Object obj=new Object();这种语句,会先调用new指令生成一个对象,然后调用dup来复制对象的引用,最后调用Object的构造方法。

而newInstance不是关键字,newInstance() 是java反射框架中类对象(Class)创建新对象的方法。在这个过程中,是先取了这个类的不带参数的构造方法,然后调用构造方法的newInstance来创建对象。

newInstance() 也经常见于工厂设计模式中,在该模式中,共产类的该方法返回一个工厂bean。如:Factory factory = new Factory();Object obj = factory.newInstance()。

严格意义上来讲,这两者并没有可比较性,因为一个是java的关键字,有明确的用法和定义。一个是经常使用,但非标准的方法名称。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部