在使用JAVA SWING编程
public static void main(String args[]) { int status = 0;
Data s ;
DataHolder t ;其中Datahe和 DataHolder都是类。 为什么我编译的时候总是显示S T没有初始化呢?
variable s t might not have been initialized我用的是netbeans,如果是它自动修改的,就会改成
public static void main(String args[]) { int status = 0;
Data s = null;
DataHolder t = null;
这下倒是不显示没有初始化了,但是程序执行结果不对。如果我人工赋值。data dataholder里 只有int值。 如果我分别给s.data1等值都赋值后。还是显示没有初始化。太奇怪了。
public static void main(String args[]) { int status = 0;
Data s ;
DataHolder t ;其中Datahe和 DataHolder都是类。 为什么我编译的时候总是显示S T没有初始化呢?
variable s t might not have been initialized我用的是netbeans,如果是它自动修改的,就会改成
public static void main(String args[]) { int status = 0;
Data s = null;
DataHolder t = null;
这下倒是不显示没有初始化了,但是程序执行结果不对。如果我人工赋值。data dataholder里 只有int值。 如果我分别给s.data1等值都赋值后。还是显示没有初始化。太奇怪了。
成员变量java会自动初始化.
Data s ;
DataHolder t ;
s = new Date();
t = new DatasHoldr();
然后再进行赋值。
你不new, 对象根本不存在, 所以不能赋值。
所以如果全局变量这么写没有问题。
但是在方法内部,局部变量就必须要求初始化。因为使用局部变量的时候初始化的地方只有这个方法内。
所以必须要求初始化。
DataHolder t ;是生命了一个DataHolder型的引用变量,而你需要的是类似于
DataHolder t = new DataHolder()来使t指向一个DataHolder对象,否则t无法使用
除非是基本类型比如说int,boolean之类的,他们无须这样做
如果是全局变量即在类中定义的变量 系统会自动复制 int double 等等类型的变量会自动赋值为0 例如全局变量 int a;编译后自动成为 int a = 0;boolean类型的变量的默认赋值是false 某个类的类型的变量的默认值是null
如果是局部变量 即在方法中定义的变量 必须要手动的为其赋值 因为局部变量的使用范围就是这个方法内 由于使用的范围有限 所以系统没必要费那么大的周折为其赋值 成本太高
还有个规矩
类的实例化必须要用new来实现 或者是Class类中的newInstance()方法实例化 入 A a = new A();此时的a才有实际效用 就像为还没有出世的小孩起名字一样 在肚子里的孩子你叫破了嗓子也没用 这个名字只能说明孩子生下来以后才有用
成员变量java会自动初始化.
很形象
DataHolder t;
这是生命了对象变量,也就是说,虽然在内存中分配了空间,在内存他们并没有任何引用。楼上有人说对象都是new出来的,意识是说。在内存中分配了空间,并正确以用了。这样才可以正确使用。
DataHolder t = new DataHolder(); || DataHolder t = null;如果你不这样写的话,编译就会报错的