在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
http://www.pconline.com.cn/pcedu/empolder/gj/java/0509/695483.html 说的是JAVA中使用静态对象出错的问题,没仔细看,只觉得他的那个实例在C#上好像 不会有这样的错误。想不到,今天,花了我好几个小时找的BUG,原来竟然是同样的错误 我的实例,我用一个类来存储图片实例(Bitmap),然后用一个列表(ArrayList)来保存多个 这样的类的实例,但是我发现每次重画的时候,被来取得不相同的图片,画的都是同一个图片, 而且是最后加入的那个类存储的图片,百思不得其解,最后发现我竟然把Bitmap声明成一个 静态的变量了. Private static Bitmap surface;阿!太粗心了. 用IL反编译,在结构化处定义 IL_0001: stsfld class [System.Drawing]System.Drawing.Bitmap SKEP.MS.ControlLib.DeviceIcon::surface; 因此你把类加入队列的时候,静态的变量确是放在其他的内存区的(不知道这样理解对不对), 最终得结果是后来的Bitmap不断的覆盖,你取得Bitmap永远是最后加入的,欢迎大家来讨论,谢谢! 今天仔细看这篇文章,发现在文章最后有这么一段字 其实Java的syntactic sugar并不算多,C#的syntactic sugar才真的是无所不在,也因此C#的初学者更容易犯了“全世界所有程序员都会犯的错误”。 附博客中静态对象的文章 http://lixianhuei.cnblogs.com/archive/2005/08/31/227274.html |
请发表评论