自己对static和reference理解不透彻造成使用linkedlist.add错误

1.对static的滥用和理解不透彻造成表面上linkedlist.add()添加的是不同的内容,实际不是

  1. class NowStatus{
  2.     /**
  3.          *加了static之后,虽然linkedlist.add()两次添加此类的对象不同,但是此类
  4.          *的三个私有变量均为static,每个对象用的都是相同的三个变量,在每一个对
  5.          *象修改其变量的值的时候,就是对共有的static变量的修改,因此最后的值
  6.          *一 样。
  7.          *结果:
  8.          *battier
  9.          *end
  10.          *3:46
  11.          *battier
  12.          *end
  13.          *3:46
  14.          *解决办法:
  15.          *去掉static
  16.          */
  17.          private static String query;
  18.     private static String status;
  19.     private static String time;
  20.     
  21.     public String getQuery(){
  22.         return query;
  23.     }
  24.     public void setQuery(String query){
  25.         this.query=query;
  26.     }
  27.     
  28.     public String getStatus(){
  29.         return status;
  30.     }
  31.     public void setStatus(String status){
  32.         this.status=status;
  33.     }
  34.     
  35.     public String getTime(){
  36.         return time;
  37.     }
  38.     public void setTime(String time){
  39.         this.time=time;
  40.     }
  41. }
  42. /**
  43.  * test LinkList add method
  44.  * 
  45.  */
  46. public class LinkList {
  47.     
  48.     
  49.     public void testLinkListed(){
  50.         List<NowStatus> list=new LinkedList<NowStatus>();
  51.         NowStatus nowStatus=new NowStatus();
  52.         nowStatus.setQuery("hah");
  53.         nowStatus.setStatus("start");
  54.         nowStatus.setTime("12:08");
  55.         list.add(nowStatus);
  56.         nowStatus=new NowStatus();
  57.         nowStatus.setQuery("battier");
  58.         nowStatus.setStatus("end");
  59.         nowStatus.setTime("3:46");
  60.         list.add(nowStatus);
  61.         
  62.         
  63.         
  64.         myPrint(list);
  65.         
  66.     }
  67.     
  68.     private static void myPrint(List<NowStatus> list){
  69.         for (int i = 0; i < list.size(); i++) {
  70.             
  71.             System.out.println(list.get(i).getQuery());
  72.             System.out.println(list.get(i).getStatus());
  73.             System.out.println(list.get(i).getTime());
  74.             
  75.         }
  76.     }
  77.     /**
  78.      * @param args
  79.      */
  80.     public static void main(String[] args) {
  81.         
  82.         LinkList linkList=new LinkList();
  83.         linkList.testLinkListed();
  84.     }
  85. }

2.对引用理解不透彻和linkedlisted.add

  1. class NowStatus{
  2.     private String query;
  3.     private String status;
  4.     private String time;
  5.     
  6.     public String getQuery(){
  7.         return query;
  8.     }
  9.     public void setQuery(String query){
  10.         this.query=query;
  11.     }
  12.     
  13.     public String getStatus(){
  14.         return status;
  15.     }
  16.     public void setStatus(String status){
  17.         this.status=status;
  18.     }
  19.     
  20.     public String getTime(){
  21.         return time;
  22.     }
  23.     public void setTime(String time){
  24.         this.time=time;
  25.     }
  26. }
  27. /**
  28.  * test LinkList add method
  29.  * @author bruce.liu
  30.  * @since 12.30  2008
  31.  */
  32. public class LinkList {
  33.     
  34.     
  35.     public void testLinkListed(){
  36.         List<NowStatus> list=new LinkedList<NowStatus>();
  37.         NowStatus nowStatus=new NowStatus();
  38.         nowStatus.setQuery("hah");
  39.         nowStatus.setStatus("start");
  40.         nowStatus.setTime("12:08");
  41.         list.add(nowStatus);
  42.         /**此时的打印结果为
  43.         *battier
  44.         *end
  45.         *3:46
  46.         *battier
  47.         *end
  48.         *3:46
  49.         *不是期望得到的结果:为什么?
  50.         *因为两次add都是同一个对象,第一次add之后,又用这个对象的方法对其中的
  51.         *变 量修改,因此两次显示结果一样,add应该是添加了一个引用,并没有创建对
  52.         *象后添加
  53.         *解决办法:@@处添加
  54.         *nowStatus=new NowStatus();
  55.         */
  56.         nowStatus=new NowStatus();
  57.         nowStatus.setQuery("battier");
  58.         nowStatus.setStatus("end");
  59.         nowStatus.setTime("3:46");
  60.         list.add(nowStatus);
  61.         
  62.         
  63.         
  64.         myPrint(list);
  65.         
  66.     }
  67.     
  68.     private static void myPrint(List<NowStatus> list){
  69.         for (int i = 0; i < list.size(); i++) {
  70.             
  71.             System.out.println(list.get(i).getQuery());
  72.             System.out.println(list.get(i).getStatus());
  73.             System.out.println(list.get(i).getTime());
  74.             
  75.         }
  76.     }
  77.     /**
  78.      * @param args
  79.      */
  80.     public static void main(String[] args) {
  81.         
  82.         LinkList linkList=new LinkList();
  83.         linkList.testLinkListed();
  84.     }
  85. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值