黑马程序员技术交流社区

标题: 编译出现问题 [打印本页]

作者: 天方地圆    时间: 2014-4-10 21:56
标题: 编译出现问题
  1.          public static void main(String[] args)
  2.            {
  3.                      String s;
  4.                      int x = 99;
  5.              
  6.                      if (x < 100) s = "x is less than 100";
  7.                      if (x > 100) s = "x is greater than 100";
  8.                       System.out.println(s.length());
  9.             
复制代码

为什么编译通不过?哪里出了问题了?

作者: 张耀扬    时间: 2014-4-10 22:20
public class A{
public static void main(String[] args)
           {
                     String s;  // String s =null; 改成这样,即可通过编译 ;
                     int x = 99;
            
                     if (x < 100) s = "x is less than 100";
                     if (x > 100) s = "x is greater than 100";
                      System.out.println(s.length());
}
}

如果按找你的定义, 系统会提示s没有初始化;

作者: jingdou56    时间: 2014-4-10 22:30
因为 你程序中的 s 变量没有初始化,

后面是两条判断语句后才能给 s赋值;

编译时,虚拟机认为给s赋值这两句话有可能都执行不到,

但是你也没有初始化,所以就会报错了,

把s初始化一下就好了!
作者: luoyilan222    时间: 2014-4-10 22:32
本帖最后由 luoyilan222 于 2014-4-10 22:36 编辑

String s = null; 局部变量没有初始化


对于java的变量,我们知道有成员变量和局部变量。
关于他们的初始化,基本上所有书上都会写。成员变量,java会帮助你初始化,局部变量,则需要程序员自己初始化。

局部变量声明以后,Java 虚拟机不会自动的为它初始化为默认值。因此对于局部变量,必须先经过显示的初始化,才能使用它。
如果编译器确认一个局部变量在使用之前可能没有被初始化,编译器将报错。







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