newInstance()方法和new关键字的区别

newInstance()实际上是把new这个方式分解为两步。

1. 调用Class加载方法加载某个类-----class.forname()

2. 实例化类--------newInstance()

eg:

A a = (A)Class.forName("pacage.A").newInstance(); //注意,包中是绝对包明

 

也可以写成如下形式:

class c = Class.forName(“Example”); 
factory = (ExampleInterface)c.newInstance(); 

其中ExampleInterface是Example的接口,可以写成如下形式: 
String className = "Example"; 
class c = Class.forName(className); 
factory = (ExampleInterface)c.newInstance(); 

进一步可以写成如下形式: 
String className = readfromXMlConfig;//从xml 配置文件中获得字符串 
class c = Class.forName(className); 
factory = (ExampleInterface)c.newInstance();


进一步解耦。


和 
A a = new A(); 
是一样的效果。

优:获得更好的灵活性,很好的一种降耦手段。 

区别:

new:关键字

newInstance():方法


newInstance: 1.弱类型 2.低效率。


new: 1.强类型 2.相对高效。

######################################################

JVM的角度:

new的时候,类可以没有被加载。

newInstance()的时候,必须:

1、这个类已经加载;

2、这个类已经连接。

而完成上面两个步骤的正是Class的静态方法forName()所完成的。

######################################################################

为什么会有两种创建对象方式?

主要是考虑到软件的可伸缩、可扩展和可重用等软件设计思想。

Java中工厂模式经常使用newInstance()方法来创建对象。

eg: 

其中ExampleInterface是Example的接口,可以写成如下形式: 
String className = "Example"; 
class
 c = Class.forName(className); 
factory = (ExampleInterface)c.newInstance(); 

上面代码已经不存在Example的类名称无论Example类怎么变化,上述代码不变.

甚至可以更换Example的兄弟类Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值