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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 千殇轮回 中级黑马   /  2014-4-20 21:43  /  1418 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 千殇轮回 于 2014-4-21 22:00 编辑

class Test {
        public static void main(String[] args) {
                int i = 5;
                if (i<15)
                        System.out.println("aaaaaaaa");

                System.out.println("bbbbbbbb");
        }
}
上面的代码能通过编译,并打印出来
class Test {
        public static void main(String[] args) {
                int i = 5;
                if (i<15)
                        int x = 10;

                System.out.println("bbbbbbbb");
        }
}
这一段代码不能通过编译,为什么

7 个回复

倒序浏览
if()后面只有一行代码的时候才能省略括号,你这是两句啊
回复 使用道具 举报
if(i<15)
int x = 10;   //这个不通过是必须滴,因为这个JVM其实是拆分成  int x;    x=10;
                 //然而if语句不加大括号的话,只能执行一条语句,那就是执行int x;     ,
                 //你上面这个的句子相当于if(i<15){int x;} x = 10;     x这个变量会找不到的,直接编译报错
回复 使用道具 举报
本帖最后由 忘川 于 2014-4-20 22:30 编辑
  1. class Test
  2.         {
  3.         public static void main(String[] args)
  4.                         {
  5.                 int i = 5;
  6.                 if (i<15)
  7.                        int x = 10;        
  8.                                 /*这里执行了2个操作,1.声明一个int型变量x 2.赋值操作x=5,
  9.                                   不加花括号,JVM默认只执行第一行,即声明操作,
  10.                                   条件语句内部声明的变量,其生命周期在出了条件语句之后就停止了
  11.                                   所以if(i<15){int x} x=10 后面这个赋值操作他找不到x变量,所以抛了
  12.                                 */
  13.                 System.out.println("bbbbbbbb");
  14.                         }
  15. }

  16. class Test
  17.         {
  18.         public static void main(String[] args)
  19.                         {
  20.                 int i = 5;
  21.                 int x;
  22.                 if (i<15)
  23.                         x = 10;        //要么加花括号,要么这么写,声明操作和赋值操作分开写
  24.                                                                
  25.                 System.out.println("bbbbbbbb");
  26.                         }
  27. }

复制代码
回复 使用道具 举报
同学, 这里这样写就可以了哦, 因为int x = 10;是两个操作的哦, 那么为什么不分解一下呢?if语句省略大括号的话可是只能执行一条语句的哦, 这里实际上是int x; x = 10;的哦
  1. class Test {
  2.          private static int x;

  3.                 public static void main(String[] args) {
  4.                  int i = 5;
  5.                  if (i<15)
  6.                          x = 10;
  7.                  System.out.println("bbbbbbbb");
  8.          }
  9. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报

正解                                    
回复 使用道具 举报
  public static void main(String[] args) {
                 int i = 5;
                 if (i<15)
                         int x = 10;//          if后面不跟大括号的话,只能跟一句话,然而
                                         //      int x = 10;    jvm会将它看成两句:int x;  x=10;所以x  = 10 已经在if代码块
                                         //            块儿外面了,所以会报错

                 System.out.println("bbbbbbbb");
         }
回复 使用道具 举报
if语句如果省略大括号的话只可以执行离他最近的一句  看好是一句    你的第一个代码执行出来是aaaaaaaa吧   
而第二个代码   if (i<15)  int x = 10;  之所以会编译错误是因为  Java虚拟机在编译的时候  会把int x = 10;
看做  int x;   x = 10;  这样的话就成了两句话了  所以会报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马