黑马程序员技术交流社区

标题: if语句 [打印本页]

作者: 仰天长啸    时间: 2015-3-7 08:29
标题: if语句
记得老师说过:if控制的语句,如果是一条语句 大括号可以省略  但是下边的语句
public class four001 {
        public static void main(String[] args) {
                int age=20;
               
                if(age>18)
                        String a = "成年人";
        }
}

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


作者: lwenz    时间: 2015-3-7 09:24
变量a 需要先声明。若改成
  1. String a = null;
  2. if(age>18)
  3.     a = "成年人";
复制代码
就好了
作者: 仰天长啸    时间: 2015-3-7 09:25
???为什么,我在if里面声明就不行??
作者: 仰天长啸    时间: 2015-3-7 09:29
看看这个也是定义在语句体内。

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

这个也是定义在语句体内

这个也是定义在语句体内

作者: Neil_Qian    时间: 2015-3-7 09:47
你鼠标移到叹号那边看一下报的什么故障!
作者: 仰天长啸    时间: 2015-3-7 10:22
仰天长啸 发表于 2015-3-7 09:25
???为什么,我在if里面声明就不行??

怎么定义了两个??能不能解释下 大s神
作者: lwenz    时间: 2015-3-7 10:27
仰天长啸 发表于 2015-3-7 09:29
看看这个也是定义在语句体内。

你在if语句体外再加一句输出语句System.out.print(a);还是会提示你创建一个局部变量a
作者: 太阳    时间: 2015-3-7 10:45
变量要定义在IF语句外吧
作者: 弹剑高歌踏浪行    时间: 2015-3-7 10:58
lwenz 发表于 2015-3-7 09:24
变量a 需要先声明。若改成   就好了

厉害 层主水平真好
作者: 太阳    时间: 2015-3-7 11:12
标准好象是定义变量应该放在所有语句前面吧
作者: 朱明仁    时间: 2015-3-7 11:15
孩子,努力吧
作者: 仰天长啸    时间: 2015-3-7 11:16
弹剑高歌踏浪行 发表于 2015-3-7 10:58
厉害 层主水平真好

这个我知道 就是不理解:'(
作者: Johnny_Hu    时间: 2015-3-7 13:00
你输出语句是写在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.         }
复制代码

作者: fantacyleo    时间: 2015-3-7 13:24
我来说下本质吧:Java语法规定,局部变量声明的位置必须是下列之一:(1)一个block中 (2)for循环语句的初始化语句中(3)try-with-resource 你这里定义的String a显然靠近第一种,但不符合第一种的要求,因为block必须是被"{}"包围的,而if后跟单条语句不是block,所以你加了"{}"就是正确的
作者: huangchunwei    时间: 2015-3-7 13:30
你的意思是,当if执行体中只有一句代码时,大括号可以省略不写。你是在验证这个问题吗。你如果是在if执行体中,声明一个变量,那么接下来该变量瞬间就被释放了,因为生命周期就这么长,作用域就是它自己本身,可能在Java中是不允许这样声明变量的吧,作用域不能是自己本身。我是这样理解的。
作者: 仰天长啸    时间: 2015-3-7 15:10
我是在验证这个问题,因为我们一般觉得是一个分号是一句,现在怎么变成一个声明变成一句了,声明完事 就释放了,难道默认的是捕捉到最小的一句??
作者: ko889910    时间: 2015-3-7 15:49
我的理解是:
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
有对这个比较熟悉的吗







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