A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在学习线程之间通信的时候 有一串代码和视频里老师写的不一样,就是if后边老师没有加{大括号},我加了,可是运行结果就是不一样,代码如下:
这是我写的:
  1. public synchronized void set(String name,String sex)
  2.         {
  3.                 if (flag)
  4.                 {
  5.                         try{this.wait();}catch(Exception e){}
  6.                 }
  7.                 else
  8.                 {
  9.                         this.name =name;
  10.                         this.sex = sex;
  11.                         flag = true;
  12.                         this.notify();
  13.                 }
  14.                
  15.         }
复制代码
老师写的是这样的:
  1. public synchronized void set(String name,String sex)
  2.         {
  3.                 if (flag)
  4.                         try{this.wait();}catch(Exception e){}
  5.                 this.name =name;
  6.                 this.sex = sex;
  7.                 flag = true;
  8.                 this.notify();               
  9.         }
复制代码

运行结果完全不一样,,,我很郁闷,,有大神知道吗?


13 个回复

倒序浏览
本帖最后由 溦丨涼 于 2015-7-10 19:17 编辑

这不是if后面有没有大括号的问题。。。是else的问题。你的第一个代码加了else且全部被{}起来了,那执行的时候和你的if语句是二选一执行,有我没他
第二个代码没有else,那些语句是不论if语句执行不执行,都会执行,除非你的if语句跟的是结束程序、跳出循环之类的指令
回复 使用道具 举报 1 0
楼上正解,
回复 使用道具 举报
1楼正解                 
回复 使用道具 举报
你的方法if为真时只运行try行。然后就结束方法。当为假时,运行this等语句。
老师的方法,当flag为真时,运行try行,之后仍然会运行this等语句。当flag为假时,只会运行this等语句。
回复 使用道具 举报
溦丨涼 发表于 2015-7-10 19:09
这不是if后面有没有大括号的问题。。。是else的问题。你的第一个代码加了else且全部被{}起来了,那执行的时 ...

恩,明白了,谢谢
回复 使用道具 举报
你是怎么学到多线程的,。。。if-else语句和花括号的作用都没高清楚。。。
回复 使用道具 举报
if后面没有花括号就是它下面的一行是if的语句
回复 使用道具 举报
看不懂啊,真是徒伤悲
回复 使用道具 举报
很明显啊,楼主,你自己写的代码里面只有if,而没有else,也就是应该放在else语句中的代码放在了外面,运行结果肯定不同啊
回复 使用道具 举报
曲终烟尽 发表于 2015-7-10 21:17
你是怎么学到多线程的,。。。if-else语句和花括号的作用都没高清楚。。。

写代码的时候疏忽了,现在明白了
回复 使用道具 举报
longbao 发表于 2015-7-10 22:58
很明显啊,楼主,你自己写的代码里面只有if,而没有else,也就是应该放在else语句中的代码放在了外面,运行 ...

恩恩,知道了,谢谢
回复 使用道具 举报
if else语句,判断成功就不再执行else语句,反之亦然
回复 使用道具 举报
哦哦哦哦哦哦哦哦哦哦哦哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马