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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 仰天长啸 中级黑马   /  2015-3-7 08:29  /  1569 人查看  /  17 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

记得老师说过:if控制的语句,如果是一条语句 大括号可以省略  但是下边的语句
public class four001 {
        public static void main(String[] args) {
                int age=20;
               
                if(age>18)
                        String a = "成年人";
        }
}

String a = "成年人";这里会报错,怎么回事????

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 加油~

查看全部评分

17 个回复

倒序浏览
变量a 需要先声明。若改成
  1. String a = null;
  2. if(age>18)
  3.     a = "成年人";
复制代码
就好了

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
???为什么,我在if里面声明就不行??

点评

那是因为你定义了两个String类型的a,变量名相同,所以报错了哥们  发表于 2015-3-7 10:08
回复 使用道具 举报
看看这个也是定义在语句体内。

QQ截图20150307092722.jpg (96.59 KB, 下载次数: 35)

这个也是定义在语句体内

这个也是定义在语句体内
回复 使用道具 举报
你鼠标移到叹号那边看一下报的什么故障!
回复 使用道具 举报
仰天长啸 发表于 2015-3-7 09:25
???为什么,我在if里面声明就不行??

怎么定义了两个??能不能解释下 大s神
回复 使用道具 举报
仰天长啸 发表于 2015-3-7 09:29
看看这个也是定义在语句体内。

你在if语句体外再加一句输出语句System.out.print(a);还是会提示你创建一个局部变量a
回复 使用道具 举报
变量要定义在IF语句外吧
回复 使用道具 举报
lwenz 发表于 2015-3-7 09:24
变量a 需要先声明。若改成   就好了

厉害 层主水平真好
回复 使用道具 举报
标准好象是定义变量应该放在所有语句前面吧
回复 使用道具 举报
孩子,努力吧
回复 使用道具 举报

这个我知道 就是不理解:'(
回复 使用道具 举报
你输出语句是写在if外面的
你那个String类型 定义的是局部变量 只能是在if内有效 出了if语句 String 变量就被释放了

这样写没事了
  1. public static void main(String[] args) {
  2.                 int age=20;
  3.                
  4.                 if(age>18)
  5.                 {
  6.                         String a = "成年人";
  7.                         System.out.print(a);
  8.                 }                  
  9.         }
复制代码
回复 使用道具 举报
我来说下本质吧:Java语法规定,局部变量声明的位置必须是下列之一:(1)一个block中 (2)for循环语句的初始化语句中(3)try-with-resource 你这里定义的String a显然靠近第一种,但不符合第一种的要求,因为block必须是被"{}"包围的,而if后跟单条语句不是block,所以你加了"{}"就是正确的
回复 使用道具 举报 2 0
你的意思是,当if执行体中只有一句代码时,大括号可以省略不写。你是在验证这个问题吗。你如果是在if执行体中,声明一个变量,那么接下来该变量瞬间就被释放了,因为生命周期就这么长,作用域就是它自己本身,可能在Java中是不允许这样声明变量的吧,作用域不能是自己本身。我是这样理解的。
回复 使用道具 举报
我是在验证这个问题,因为我们一般觉得是一个分号是一句,现在怎么变成一个声明变成一句了,声明完事 就释放了,难道默认的是捕捉到最小的一句??
回复 使用道具 举报
我的理解是:
String s="sss";//做了两件事在1.常量池中创建匿名变量x="sss"(x作用域只在1中有效);2.String s=new String(x);
x声明在if下的第一句,但是却在下一句被使用,超出作用域了
对于三元运算符也会发生报错的状况:不知道什么原因
代码如下
  1. if(age>18)
  2.                         true?System.out.println("yes"):System.out.println("no");
复制代码

错误如下:
No exception of type void can be thrown; an exception type must be a subclass of Throwable
有对这个比较熟悉的吗


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马