设为首页 加入收藏 网站首页
休闲娱乐
军事·社会百态·娱乐八卦·校园
体育·美女写真·幽默笑话·游戏
综合·在线视频·搞笑图片·灵异
两性生活
两性知识·性爱技巧
情色实录·两性图片
女性健康·同性之恋
电脑网络
网络编程·网页制作·软件教学
操作系统·图形图象·冲浪宝典
网络安全·邮件系统·认证考试
热点专题
芙蓉·真人漫画
72式·欲望都市
帅哥·人体彩绘
您现在的位置: 世纪中国 >> 认证考试 >> Java认证 >> 教程正文
全世界所有程序员都会犯的错误
作者:中国图霸    教程来源:网络    点击数:    更新时间:2007-1-4
c Singleton getInstance() {
   return obj;
   }
   }

   这是因为:当class具有static field,且直接在宣告处透过「=...」的方式设定其值时,编译器会自动将这些叙述依序搬到class constructor内。同样地,当class具有instance field,且直接在宣告处透过「=...」的方式设定其值时,编译器会自动将这些叙述依序搬到instance constructor内。

   此程序在class constructor内,还未将static field初始化时(这时候,counter1和counter2都是0),就呼叫instance constructor,而instance constructor竟然还会去更动static field的值,使得counter1和counter2都变成1。然后instance constructor执行完,回到class constructor,再把counter2的值设为0(但是counter1维持不变)。最后的结果:counter1等于1,counter2等于0。

   欲改正程序1,方法有三:

   -方法一:将singleton field的宣告调到counter1与counter2 field之后。这是最好的作法。

   -方法二:将counter2=0的宣告中,「=0」的部分删除。这种作法只有在希望

   -方法三:将初始化的动作搬到class constructors内,自行撰写,而不依赖编译器产生。这是最保险的作法。

   如何避免犯下「全世界所有程序员都会犯的错误」,我给各位Java程序员的建议是:

   -熟读Java Language Specification

   -在有疑问时,使用J2SDK所提供的javap来反组译Java Bytecode,直接观察编译后的结果。

   下面是我用javap来反组译程序1的示范:

   C:\\>javap -c -classpath . Singleton

   Compiled from MyMain.java
   class Singleton extends java.lang.Object {
   public static int counter1;
   public static int counter2;
   public static Singleton getInstance();
   static {};
   }
  Method Singleton()
   0 aload_0
   1 invokespecial #1
   4 getstatic #2
   7 iconst_1
   8 iadd
   9 putstatic #2
   12 getstatic #3
   15 iconst_1
   16 iadd
   17 putstatic #3
   20 return

   Method Singleton getInstance()
   0 getstatic #4
   3 areturn

   Method static {}
   0 new #5
   3 dup
   4 invokespecial #6
   7 putstatic #4
   10 iconst_0
   11 putstatic #3
   14 return

   其实Java的syntactic sugar并不算多,C#的syntactic sugar才真的是无所不在,也因此C#的初学者更

上一页  [1] [2] [3] 下一页

分类推荐
社会 社会 娱乐 军事 校园
幽默 体育 女性 专题
电脑 编程 网页 软件 系统
安全 图象 冲浪 认证
搞笑 人物 动物 物品 表情
签名 色图 漫画 奇闻
美女 明星 清纯 自拍 欧美
丝袜 卡通 性感 走光
两性 知识 性图 孕育 技巧
同性 单身 情感 实录
视频 写真 搞笑 MTV 翻唱
写实 片段 游戏 综艺
Java认证热门文章
普通教程 该学Java或.NET?
普通教程 Java认证介绍
普通教程 Sun认证Java开发员-SCJD认证介
普通教程 课程介绍(11)SL-351 Java数据库
普通教程 课程介绍(8)SL-425 体系结构及
普通教程 课程介绍(13)SL-291 JavaBeans
普通教程 课程介绍(12)SL-330 Java开发数
普通教程 课程介绍(9)SL-310 超越CGI 开
普通教程 课程介绍(7)SEM-SL-345 Java 2
普通教程 课程介绍(4)SL-275 Java语言编
普通教程 课程介绍(10)SL-315 Java Serv
普通教程 课程介绍(6)SL-285 高级Java编
普通教程 课程介绍(5)SL-314 用Java开发
普通教程 课程介绍(3)SL-265 结构化程序
普通教程 课程介绍(2)SL-210 向Java面向
普通教程 课程介绍(1)SL-110 初级Java语
普通教程 最新Sun授权ASEC-Java培训中心
普通教程 Java开发员认证
普通教程 Java:IT认证中最有魅力的开发工
普通教程 Java认证权威问答精华集

  广东广州海珠区 世纪网络工作室 版权所有 上海电信提供网络带宽
信箱: 9297659@qq.com 粤ICP备06113754号