学习java心得体会(一)

原创 2003年06月13日 18:33:00

 

1.“我不敢相信这是真的!”

       我正在开发一个swing应用程序,这个程序通过后台的rmi服务器获得数据,然后使用新的数据通知前台的显示程序,前台的显示反过来也可以在被修改以后通知后台保存新的数据。具体的过程我使用了Sequence视图来表示:

       <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />CSDN_Dev_Image_2003-6-131742020.gif

       其中c/s架构传递的使某个可视化元素的data model的序列化字符串。前台使用了一个PANEL类来显示当前所有的可视化的元素。PANEL类的表示如下:

CSDN_Dev_Image_2003-6-131742022.gif

       现在的问题是,系统刚刚启动,那么显示的将是从RMI服务器刚刚读入的数据,这些数据将会被DeSerialized成为VisualObjects,这样系统将会显示一个和系统上次关闭以前一样的视图给用户看,但是,我发现,如果这个时候,用户删除了一个panel上面的VisualObject,那么如果用下面的程序实现这个删除的过程,将会掉入一个陷阱:

       public void removeVisualObject(VisualObject vo)  {

           if(vo == null) return;

    panel.remove(vo);

}

       运行程序,你会发现执行删除操作的时候没有任何相应,于是我不死心,决定调试一下,列出所有当前panel上面的所有的元素,和此vo进行一一比较,看看传入的vo是不是有问题,代码如下:

       public void removeVisualObject(VisualObject vo) {

    if(vo == null) return;

    for(int i=0;i<panel.getComponents().length;i++) {

      tempVo = (vo)panel.getComponent(i);

      if(vo.equals(tempVo)) {

        System.out.println("find equals");

      }

    }

    System.out.println("No equals");

}

我想,如果发现NO equals那么就是我传入参数的问题,结果竟然打印出了Find Equals,这是为什么哪?既然我传入的对象在panel上面存在,那为什么我的删除操作不成功那?抓耳挠腮之际,我决定钻研到底,于是我又往前面走了一步:

public void removeVisualObject(VisualObject vo) {

    if(vo == null) return;

    for(int i=0;i<panel.getComponents().length;i++) {

      tempVo = (vo)panel.getComponent(i);

      if(vo.equals(tempVo)) {

        System.out.println("find equals");

              Panel.remove(tempVo);

      }

    }

    System.out.println("No equals");

}

又一此心惊胆颤的运行程序,点击删除,结果。。。。我不敢相信,心里一怔狂喜,终于搞定了,要不是在办公室里面我真想大喊一声,“我。。。”,算了,不要忙于庆祝了,开始分析一下原因吧。思前想后,我终于明白了一些关键的问题:

1、  就是我的对象是通过序列化的方式保存起来的。

2、  我的对象恢复的时候是通过反序列化的方式回复的,这样对象里面的内容肯定不会发生变化。但是别忘记了,对象的地址肯定不一样了。这就是问题关键点。

3、  Panel删除一个对象的时候竟然是通过地址来删除的,虽然我重载了对象的equals方法,比较的时候绝对相等。但是苦于java api不调用,我也没有办法。

4、  只能通过这种自己调用equals方法比较然后删除panel上面实际存在的对象的方法来解决这个问题。

 

或许大家看了我的问题以后会发现我的解决方法不好,或者根本就是错误的。请大家批评指正。联系方式:vipcowrie@sina.com

 

java学习总结及心得体会

java语言学习总结
  • u010331406
  • u010331406
  • 2015年08月02日 16:41
  • 5001

学习Java心得体会

学习Java心得体会
  • javaniuniu
  • javaniuniu
  • 2016年12月28日 15:52
  • 10964

javaweb学习总结(体会)

这篇文章虽说是叫《学习javaweb总结》,其实更多的是自己的心得体会,真正涉及技术的问题还不是很多,关于技术的总结,会在后续发表。本文虽然写完很久,但是一直没有整理,加上对于在网上发表文章也是刚刚开...
  • u014625500
  • u014625500
  • 2014年04月13日 20:52
  • 1765

java学习之路----自己学习的总结

自己对自己学习的总结,还有多线程的一些面试题,如果不懂的可以留言哦
  • likeaijiaqi
  • likeaijiaqi
  • 2013年12月18日 10:05
  • 1618

java 学习心得体会(一)

1.    数组有没有length()这个方法? String有没有length()这个方法?        答:数组没有length()这个方法,有length的属性。        String有...
  • JavaAlpha
  • JavaAlpha
  • 2010年02月26日 19:26
  • 1155

设计模式学习心得——one

背景 最近在工作中,要处理分布式多组件间的通信反馈问题,但是因为没有学习过设计模式,导致了编码实现的功能健壮性很差,并且难以维护,自己都理不清整个流程的逻辑细节。 面对这种情况,开始学习《Head F...
  • naruto1993
  • naruto1993
  • 2017年04月04日 22:49
  • 350

学习java的感悟和总结

学习java也有两年的时间了,刚接触java,首先学习java的基本语法、常见API、java IO和多线程,后来在实际写项目的时候发现java本是很简单的一门语言,但是还要熟悉其他的知识。接着在盲目...
  • Bamboo_Dong
  • Bamboo_Dong
  • 2015年07月26日 11:40
  • 2593

java入门个人体会

这篇文章是我第一篇开同自己的博客的写的文章以前老是百度上找问题答案,度娘给的答案搜索结果导师csdn上的让我慢慢进入csdn 了,现在也应该为csdn做出一点贡献的时候到了。纯属个人心得体会。不喜勿喷...
  • qq_29232081
  • qq_29232081
  • 2017年02月28日 17:09
  • 170

JAVA学习心得--类与对象

1、T为一个对象,若T=NULL,则T为空对象,空对象不能使用,不能让一个空对象去调用方法产生行为。如果程序中使用了空对象,程序运行时会出现异常:NullPointException。由于对象是动态地...
  • richard_2010
  • richard_2010
  • 2007年04月12日 09:31
  • 1373

jdbc 学习总结一

jdbc 学习总结一
  • xu511739113
  • xu511739113
  • 2016年09月12日 10:20
  • 166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习java心得体会(一)
举报原因:
原因补充:

(最多只允许输入30个字)