|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你通过从书的数量和开发周期及运行速度来证明:net网页编程和ruby要比java简单。
本文次要对类和对象初始化全历程举行剖析,经由过程一个实践成绩引进,将源代码转换成JVM字节码后,对JVM实行历程的关头点举行周全剖析,并在文中交叉进了相干JVM标准和JVM的部份内部实际常识,以实际与实践分离的体例先容对象初始化和类初始化之间的合作和大概存在的抵触成绩。
成绩引进
克日我在调试一个列举范例的剖析器程序,该剖析器是将数据库内一万多条列举代码装载到缓存中,为了完成疾速定位列举代码和详细列举种别的一切列举元素,该类在装载列举代码的同时对其接纳两种战略创建内存索引。因为该类是一个大众服务类,在程序各个层面城市利用到它,因而我将它完成为一个单例类。这个类在我调剂类实例化语句地位之前运转一般,但当我把该类实例化语句调剂到静态初始化语句之前时,我的程序不再为我事情了。上面是经由我简化后的示例代码:
[清单一]
packagecom.ccb.framework.enums;
importjava.util.Collections;
importjava.util.HashMap;
importjava.util.Map;
publicclassCachingEnumResolver{
//单态实例 统统成绩皆由此行引发
privatestaticfinalCachingEnumResolverSINGLE_ENUM_RESOLVER=newCachingEnumResolver();
/*MSGCODE->Category内存索引*/
privatestaticMapCODE_MAP_CACHE;
static{
CODE_MAP_CACHE=newHashMap();
//为了申明成绩,我在这里初始化一条数据
CODE_MAP_CACHE.put("0","北京市");
}
//private,forsingleinstance
privateCachingEnumResolver(){
//初始化加载数据引发成绩,该办法也要负点义务
initEnums();
}
/***初始化一切的列举范例*/
publicstaticvoidinitEnums(){
//~~~~~~~~~成绩从这里入手下手表露~~~~~~~~~~~//
if(null==CODE_MAP_CACHE){
System.out.println("CODE_MAP_CACHE为空,成绩在这里入手下手表露.");
CODE_MAP_CACHE=newHashMap();
}
CODE_MAP_CACHE.put("1","北京市");
CODE_MAP_CACHE.put("2","云南省");
//.....othercode...
}
publicMapgetCache(){
returnCollections.unmodifiableMap(CODE_MAP_CACHE);
}
/***猎取单态实例**@return*/
publicstaticCachingEnumResolvergetInstance(){
returnSINGLE_ENUM_RESOLVER;
}
publicstaticvoidmain(String[]args){
System.out.println(CachingEnumResolver.getInstance().getCache());
}
}
想必人人看了下面的代码后会感到有些茫然,这个类看起来没有成绩啊,这切实其实属于典范的饿汉式单态形式啊,怎样会有成绩呢?
是的,他看起来切实其实没有成绩,但是假如将他run起来时,其了局是他不会为你准确work。运转该类,它的实行了局是:
<p>
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net网页编程的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。 |
|