CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

用Class.newInstance()创建实例快,还是用new创建实例快?

楼主yxp810325(bearbear)2005-05-22 23:48:32 在 Java / J2SE / 基础类 提问

1.Class   loaderClass   =   Class.forName("MyClass");  
  Object   object   =   loaderClass.newInstance();  
  2.MyClass   temp=new   MyClass();  
   
  请问哪种方式更快?  
  问题点数:100、回复次数:11Top

1 楼sunjie1981()回复于 2005-05-22 23:53:42 得分 0

当然后者,前者要先加载然后才可以得到实例Top

2 楼yxp810325(bearbear)回复于 2005-05-23 00:03:56 得分 0

研究过jdk源代码发现Class的newInstance()方法创建实例,实际上是用到了Constructor对象,Class有一个cachedConstructor对象。每次创建对象的时候都是调用cachedConstructor.newInstance()创建实例,你说的每次都得加载我认为只加载一次呀,因为虚拟机为每一个特定的类提供唯一一个Class对象管理这个类。因为cachedConstructor已经缓存了,所以在多线程调用创建对象的时候是cachedConstructor.newInstance()快,还是new快?Top

3 楼sunshine5246(阳光)回复于 2005-05-23 07:20:35 得分 0

帮顶  
  学习Top

4 楼cutelion(MADEinCNNC)回复于 2005-05-23 08:44:22 得分 0

關注中。。。。。。Top

5 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2005-05-23 08:57:32 得分 30

每个类只会被加载一次,不会有第二次。  
  不过Class.newInstance会启动一系列的reflection机制,最终执行创建过程,肯定是要慢一些的。Top

6 楼OnlyFor_love(『勾勾手指头 一辈子不分手』)回复于 2005-05-23 09:10:27 得分 30

前者使用反射机制去创建一个实例,后者是普通的new一个对象!  
  不能说哪个好哪个不好!  
  一般在平常的创建实例过程中都采用new的方式,不过在数据库连接时,都是采用反射机制的!Top

7 楼CAYU(中原)回复于 2005-05-23 09:46:55 得分 0

2.MyClass   temp=new   MyClass();Top

8 楼treeroot(旗鲁特)回复于 2005-05-23 10:23:45 得分 30

当然是new快,编译时就知道类型了,很容易优化  
  用反射要运行时才知道是什么类型Top

9 楼enrico(小甭)回复于 2005-05-23 10:46:40 得分 0

学习Top

10 楼josephlong(josephlong)回复于 2005-05-23 10:48:19 得分 0

支持用new方法,用第一方法经常会出现问题的  
   
  上项目找项目就到erp商务网  
  www.chinaident.comTop

11 楼snage(霹雳狂刀)回复于 2005-05-23 10:53:25 得分 10

作个测试不就知道了啊!  
   
  class     MyClass{}  
   
  public   class   Tester{  
                public   static   void   getTime(){  
                              System.out.println(System.currentMillsTime());  
                }  
                public   static   void   main(String[]   args){  
                              Tester.getTime();  
                              Class   loaderClass   =   Class.forName("MyClass");  
                              Object   object   =   loaderClass.newInstance();  
                              Tester.getTime();  
                              MyClass   temp=new   MyClass();  
                              Tester.getTime();  
                }  
  }  
   
   
  手头没有jdk,代码也没有调试,就是个这思路吧!!!看看时间差就知道了  
   
   
                 
           
   
  Top

相关问题

  • 求救 组件创建实例失败
  • 怎样为SSLContext创建一个实例?
  • 求创建新表实例?在线等
  • 创建类对象实例问题?
  • HttpSession实例什么时候创建的?
  • 如何创建多窗体实例
  • 如何根据类型创建实例
  • 怎样创建COM接口的实例
  • 我创建了一个简单的ATL object和一个ATL Class,请问该怎样实例化它们?
  • 一个Class能不能知道自己被谁(Class)创建实例?或在其某方法中直接获取调用此方法的Class的名称?

关键词

  • 实例
  • cachedconstructor
  • loaderclass
  • newinstance
  • 创建
  • myclass
  • 加载
  • 对象
  • tester
  • gettime

得分解答快速导航

  • 帖主:yxp810325
  • Polarislee
  • OnlyFor_love
  • treeroot
  • snage

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo