class AA{
    int i = 2;
    public static void main(String[] args){
 String ss ; 
 System.out.println(ss);
}
}
这样的话,编译出错:
AA.java:6: 可能尚未初始化变量 ss
                                System.out.println(ss);
                                                   ^
1 错误修改成:
class AA{
    int i = 2;
    static String ss ; 
    public static void main(String[] args){
System.out.println(ss);
}
}
就可以编译通过了。这是为什么呢?
非常谢谢大家啊。

解决方案 »

  1.   

    错误:String ss ;    ss在使用前必须初始化
    static String ss ; 
    static 的字符串默认初始化为NULL。
      

  2.   

    String ss ;   static String ss ; 
    在java中 成员变量不用初始化,系统会默认给他初值
    而定义的成员变量是必须赋初值的
      

  3.   

    如果一个属性被定义为static了,那么将被提前初始化
      

  4.   

    String ss ; 是动态变量。
      

  5.   

    错误:String ss ;    ss在使用前必须初始化 
    static String ss ; 
    static 的字符串默认初始化为null。 
      

  6.   

    关键就是static ,建议楼主看看有关static 有关的章节
      

  7.   

    int 等类型是有初始化默认值的。。
    所以能输出。
    但是String 是定义的东西。。在if()等等的语句中是必须要初始化赋值的,,,,记住就行了。
    static是静态,,,提前初始化 了。。所以就为默认值NULL了,,,
      

  8.   

    基本都对局部变量必须指定初始值为什么?因为局部变量未初始化更多的是由于程序bug,如果编译器赋默认值,就会掩盖了这种bug了
      

  9.   

    赞同!这是Java 虚拟机定的规矩.
      

  10.   

    如果是在main方法里面,那么String是一个局部变量,赋值之后才可以使用;但是如果是在main方法外面的话,就是一个字段,默认值是null,但是因为main方法是一个静态方法,不可以调用实例的,所以String前面要加上静态关键字static。
      

  11.   

    class A
    {
    int i;     //没有初始化成员变量;
    String s;  //没有初始化成员变量;
    }
    public class StaticTest
    {
    static String s1;//局部变量可以不初始化,但是必须声明为静态的
    public static void main(String[] args)
    {
    A MyA=new A();
    System.out.println(MyA.i);// 输出一个类对象的成员变量, 成员变量可以不初始化,不同类型的变量有不同的默认值,输出值为:0

    System.out.println(MyA.s);//输出值为:null;
      
    System.out.println(s1);  //输出值为:null;
    }
    }随便写了一个测试类,凑活着看看吧,这就是我的理解!!!
      

  12.   

    class A
    {
    int i;
    String s;}
    public class StaticTest
    {

    public static void main(String[] args)
    { final  String s2="asd";//局部变量必须初始化,并且是final,类型的
    A MyA=new A();
    System.out.println(MyA.i);//成员变量可以不初始化,不同类型的变量有不同的默认值,输出值为:0

    System.out.println(MyA.s);//输出值为:null;
      
    System.out.println(s1);  //输出值为:null;
    }
    }不好意思,上一个代码学错了啊,汗!!!补充一个!!!
      

  13.   

    声明为static后就是成员变量,成员变量会自动赋初值,而局部变量必须在声明时赋初值。
      

  14.   

    首先,在调用main方法前,所有的属性都必须赋值。 
    对于静态的东西,JVM在加载类时,就在內存中开辟了这些静态的空间,指向了一块内存,因此就自动赋值了,不会产生错误。