黑马程序员技术交流社区

标题: 关于常量初始化的头疼问题! [打印本页]

作者: 森仔    时间: 2012-11-21 23:43
标题: 关于常量初始化的头疼问题!
本帖最后由 森仔 于 2012-11-24 08:44 编辑

回答别人的帖子竟把自己给绕进去了 ,求高人!!!!、
为何它能编译通过,
int a = 5;
int b=0;
if(a > 3)
{
b = 2;
}

System.out.println(b);

而它就不行了呢!!
int a = 5;
int b;
if(a > 3)
{
b = 2;
}

System.out.println(b);


作者: 张权    时间: 2012-11-21 23:46
int a = 5;
int b=0;
if(a > 3)
{
b = 2;
}

System.out.println(b);

这个行,因为你初始化y了啊!!

int a = 5;
int b;
if(a > 3)
{
b = 2;
}

System.out.println(b);
这个不行,是因为你没有初始化变量啊!


作者: 森仔    时间: 2012-11-22 00:13
张权 发表于 2012-11-21 23:46
int a = 5;
int b=0;
if(a > 3)

哥们,这明明是“b”啊! 还有定义变量的时候不一定非要初始化啊 默认的int型变量初始化值为0的
作者: 卞潇洋    时间: 2012-11-22 00:23
我想是这样的,如果这个b是作为一个类的属性值声明,大可没事的,但是
如果b在一个方法或者是静态方法中,都要进行初始化的,基本数据类型可以是0什么的,但不可以什么都没有,同样对象也一样,可以赋null,但不可以什么都没有
作者: 倪鹏博    时间: 2012-11-22 00:45
这里需要区分一下两段代码中if语句的功能:
第一段代码,if语句实际上是先要对b进行值的改变,也就是b本身已经初始化过了,在满足一定条件的时候进行值的改变!无论是否改变成功,都不影响最后输出语句的执行!所以编译没有问题!

第二段代码,if语句的功能实际上进行的是对b有条件的初始化,满足条件则初始化b,不满足则不初始化,而b初始化了就可以输出,没有初始化就不能输出!所以if语句的是否执行导致输出语句可能无法执行!所以就报错,编译不能通过!
作者: 罗雪梅    时间: 2012-11-22 09:49
这个是因为b是局部变量,而局部变量要初始化才能够使用的,什么是局部变量呢,最简单的办法就是写在方法内的都是局部变量,在定义的时候一定要先初始化就是给个值。如果你这个变量定义在方法体个,那就是成员变量了,这就不用初始化
作者: 韩俊杰    时间: 2012-11-22 10:00
  int a = 5;
  int b=0;
  if(a > 3)
  {
  b = 2;
  }
  System.out.println(b);
这个之所以能编译通过,是因为你对b进行了初始化动作,所以它能编译通过

  int a = 5;
  int b;
  if(a > 3)
  {
  b = 2;
  }
  System.out.println(b);
而这个你没有对b进行初始化就去使用它,肯定会报错,这个是基础问题,一定要细心

作者: 倪鹏博    时间: 2012-11-23 02:21
本帖最后由 倪鹏博 于 2012-11-23 02:23 编辑
倪鹏博 发表于 2012-11-22 00:45
这里需要区分一下两段代码中if语句的功能:
第一段代码,if语句实际上是先要对b进行值的改变,也就是b本身 ...

我这里其实是从人的角度去理解这个编译过程的!我认为这样理解编译器比较容易一点!
如果从编译器的角度来看的话,确实跟if没关系!只要保证变量用之前一定初始化过就行!




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