黑马程序员技术交流社区

标题: if条件判断后有大括号和没有大括号的区别,有谁知道呢? [打印本页]

作者: 帅帅loyal    时间: 2015-7-10 18:29
标题: if条件判断后有大括号和没有大括号的区别,有谁知道呢?
在学习线程之间通信的时候 有一串代码和视频里老师写的不一样,就是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.         }
复制代码

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



作者: 溦丨涼    时间: 2015-7-10 19:09
本帖最后由 溦丨涼 于 2015-7-10 19:17 编辑

这不是if后面有没有大括号的问题。。。是else的问题。你的第一个代码加了else且全部被{}起来了,那执行的时候和你的if语句是二选一执行,有我没他
第二个代码没有else,那些语句是不论if语句执行不执行,都会执行,除非你的if语句跟的是结束程序、跳出循环之类的指令

作者: 梦想起航    时间: 2015-7-10 19:17
楼上正解,
作者: threeforPP    时间: 2015-7-10 19:44
1楼正解                 
作者: firwood    时间: 2015-7-10 20:37
你的方法if为真时只运行try行。然后就结束方法。当为假时,运行this等语句。
老师的方法,当flag为真时,运行try行,之后仍然会运行this等语句。当flag为假时,只会运行this等语句。
作者: 帅帅loyal    时间: 2015-7-10 21:12
溦丨涼 发表于 2015-7-10 19:09
这不是if后面有没有大括号的问题。。。是else的问题。你的第一个代码加了else且全部被{}起来了,那执行的时 ...

恩,明白了,谢谢
作者: 曲终烟尽    时间: 2015-7-10 21:17
你是怎么学到多线程的,。。。if-else语句和花括号的作用都没高清楚。。。
作者: 发抖的_DtYJA    时间: 2015-7-10 21:35
if后面没有花括号就是它下面的一行是if的语句
作者: 莱克神    时间: 2015-7-10 22:49
看不懂啊,真是徒伤悲
作者: longbao    时间: 2015-7-10 22:58
很明显啊,楼主,你自己写的代码里面只有if,而没有else,也就是应该放在else语句中的代码放在了外面,运行结果肯定不同啊
作者: 帅帅loyal    时间: 2015-7-11 10:58
曲终烟尽 发表于 2015-7-10 21:17
你是怎么学到多线程的,。。。if-else语句和花括号的作用都没高清楚。。。

写代码的时候疏忽了,现在明白了
作者: 帅帅loyal    时间: 2015-7-11 11:00
longbao 发表于 2015-7-10 22:58
很明显啊,楼主,你自己写的代码里面只有if,而没有else,也就是应该放在else语句中的代码放在了外面,运行 ...

恩恩,知道了,谢谢
作者: 18671183990    时间: 2015-7-11 11:49
if else语句,判断成功就不再执行else语句,反之亦然
作者: helloworld79496    时间: 2015-7-16 10:01
哦哦哦哦哦哦哦哦哦哦哦哦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2