黑马程序员技术交流社区

标题: 成员变量定义的一个问题 [打印本页]

作者: 薄炳鑫    时间: 2012-6-22 23:10
标题: 成员变量定义的一个问题
本帖最后由 薄炳鑫 于 2012-6-23 00:00 编辑

private Person p ;
private Person p = null;
这两种方式有什么区别呢,怎么有的时候用第一种,有的时候用第二种。什么时候应该用哪种,高手给解释一下。


作者: 朱志辉    时间: 2012-6-22 23:31
本帖最后由 朱志辉 于 2012-6-22 23:40 编辑

这得看p是成员变量(类的字段)还是局部变量(方法中的变量)。
Java规定,任何变量在使用之前,必须对其赋值,而系统不会自动为局部变量赋初值,所以需要显式地对其赋初值。当然可以给变量赋值为null。如果在变量赋值之前就使用它,编译器会报错,说自动变量未被初始化。 但对于成员变量,系统会自动赋初值,基本类型的值为0,布尔类型的值为false,对象类型的值为null。


作者: 黑马张扬    时间: 2012-6-22 23:34
一种是没有手动为其初始化的  一种是手动初始化了的
类里定义的数据成员称为属性,属性可不赋初值,若不赋初值则JAVA会自动添加默认值;
方法里定义的数据成员称为变量,变量在参与运算之前必须赋初值。
作者: 薄炳鑫    时间: 2012-6-22 23:39
黑马张扬 发表于 2012-6-22 23:34
一种是没有手动为其初始化的  一种是手动初始化了的
类里定义的数据成员称为属性,属性可不赋初值,若不赋 ...

你的方法中定义数据成员变量是不是这么理解呀
在方法体内定义个变量如:
public int hh(){
  person p = null;//这里必须初始化,要不初始化就报错?
}
作者: 黑马张扬    时间: 2012-6-22 23:51
薄炳鑫 发表于 2012-6-22 23:39
你的方法中定义数据成员变量是不是这么理解呀
在方法体内定义个变量如:
public int hh(){

不一定要定义的时候初始化 但是在要用到它之前一定要初始化      而属性可以不手动初始化
作者: 薄炳鑫    时间: 2012-6-23 00:00
朱志辉 发表于 2012-6-22 23:31
这得看p是成员变量(类的字段)还是局部变量(方法中的变量)。
Java规定,任何变量在使用之前,必须对其赋 ...

这个解释好呀,让我理解了点新的东西。谢谢。。。
作者: 耿鑫    时间: 2012-6-23 00:46
这个就是手动和默认初始化的问题,定义的时候不一定要初始化,但是用的时候必须初始化,尤其是引用类型,不初始化就可能会抛空指针异常

比如你定义一个数组 int[] arr;  后面如果不初始化就调用arr.length的话肯定就报错,所以使用之前必须初始化,而定义的时候不需要初始化。
作者: 游洪波    时间: 2012-6-23 15:17
本帖最后由 游洪波 于 2012-6-23 15:26 编辑

java中的变量分为两种,成员变量和局部变量,成员变量可以不初始化直接使用系统会自动赋值
而局部变量你在定义是可以不初始化但是在使用时会报异常提示变量没有被初始化





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