A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 薄炳鑫 黑马帝   /  2012-6-22 23:10  /  2214 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 薄炳鑫 于 2012-6-23 00:00 编辑

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

7 个回复

倒序浏览
本帖最后由 朱志辉 于 2012-6-22 23:40 编辑

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

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

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

你的方法中定义数据成员变量是不是这么理解呀
在方法体内定义个变量如:
public int hh(){
  person p = null;//这里必须初始化,要不初始化就报错?
}
回复 使用道具 举报
薄炳鑫 发表于 2012-6-22 23:39
你的方法中定义数据成员变量是不是这么理解呀
在方法体内定义个变量如:
public int hh(){

不一定要定义的时候初始化 但是在要用到它之前一定要初始化      而属性可以不手动初始化

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
朱志辉 发表于 2012-6-22 23:31
这得看p是成员变量(类的字段)还是局部变量(方法中的变量)。
Java规定,任何变量在使用之前,必须对其赋 ...

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

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

java中的变量分为两种,成员变量和局部变量,成员变量可以不初始化直接使用系统会自动赋值
而局部变量你在定义是可以不初始化但是在使用时会报异常提示变量没有被初始化
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马