日期:2014-05-20  浏览次数:20748 次

关于对象初始化,这是不是一个Bug啊?
package com.xujin;

class Hello {
 String title;
 int value;
 public Hello() {
 title = title+ " World";
 }
public Hello(int value) {
this();
this.value = value;
title += "Hello";
}
 } 
 
 public class Test{
 public static void main(String [] args){
 Hello c = new Hello(5);
 System.out.println(c.title);
 
 String s;
 //s = s + "Hello!";//The local variable s may not have been initialized
 }
 }


我还没初始化title就用它了,居然没报错!
而s却报错了!奇怪了!
string java

------解决方案--------------------
类变量是不需要初始化的,没有初始化的类变量在类初始化时会被自动分配应有的初始值,而局部变量在调用时必须先初始化。
------解决方案--------------------
这不是bug.
成员变量会在创建对象的时候赋值,开始赋默认值,象上面代码title为null.追溯完父类后,在执行构造方法前,再显示赋值,上面代码没有显示赋值,仍旧是null.
方法里必需声明赋值。
------解决方案--------------------
引用:
引用:
类变量是不需要初始化的,没有初始化的类变量在类初始化时会被自动分配应有的初始值,而局部变量在调用时必须先初始化。那为什么会输出nullWorldHello,而不是WorldHello呢?

String类型成员变量自动初始化为null
title = title+ "World";
当执行这一句时,null转换成字符串"null"再连接上World