java成员变量默认赋值和初始化

当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,设置默认值,然后,为成员变量指定初始值。但是,如下所示:classtest{inta=b+1;intb=1... 当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,设置默认值,然后,为成员变量指定初始值。但是,如下所示:
class test{
int a = b+1;
int b =1;
}提示错误!
执行顺序不是大致可以认为是这样么:
int a = 0;
int b = 0;
a = b+1;
b = 1;
(感觉大致就是这样子吧)
如果是这样的话上边当int a = b+1时b应该已经有默认值了,但为什么报错啊?
表达有点乱,求大神解释!!!
创建类的实例时,系统自动分配内存空间,设置默认值,然后,为成员变量指定初始化(如果有的话)。
class test{
int a;
}
像这样,在程序中实例化并输出会输出 a 为 0,因为默认值的问题,
如果像这样 class test{
int a =1;
}
因为有初始化所以输出为a 为1。
总之当成员变量分配内存后,应该是有默认值的,顺序应该是:

int a;
int b;(这里应该都在分配内存时指定默认值为0了)
然后 再执行初始化:
a = b+1;
b = 1;
就这样子吧比如下面程序是对的
class{
{
a = 1;
}
int a =2;
}
这次应该清楚点了吧!求解释!
展开
 我来答
liuqiwen0512
2014-02-26 · TA获得超过115个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:101万
展开全部
程序的执行顺序是自上而下,当你使用b变量时 b变量还未定义。
另外设置默认值也不是0 c语言中是一个随机数, java中不太清楚。
追问
这确实和c不一样,这是关于对象的,有点区别
追答
初始化不是你以为的顺序
初始化是从上而下。
初始化赋值会直接赋值
还没执行到b定义你就用怎么能不错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
java小黑马
2014-02-26 · TA获得超过2873个赞
知道大有可为答主
回答量:3119
采纳率:53%
帮助的人:570万
展开全部
你应该先定义 int b;
然后 int a=b+1;
int b=1;
这样a才会是1,你在使用a的时候根本没有定义b是什么呢怎么用,有可能b还是个数组呢,怎么直接做加法啊,是不是?
更多追问追答
追问
java 初始化话之前不是应该有默认值么?
追答
你定义的时候给变量加上static修饰词试试看,因为你定义的是成员变量的一种(分为实例变量和静态变量)实例变量,他不会随着类的加载就初始化给你加载上……你应该是认为程静态变量了吧……不明白的话可以继续追问……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友efa43df
2014-02-26 · 超过32用户采纳过TA的回答
知道答主
回答量:112
采纳率:0%
帮助的人:43.2万
展开全部
上面的b你还没声明,就用了,,,,无语,,,语法不报错吗,,,
追问
不是这样的,你在仔细看看亲,求解答啊
追答
你下边的那个a是在class里面的,上边的那个不是,具体我也不大清楚,,,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wwzzhh166
2014-02-26 · TA获得超过121个赞
知道答主
回答量:73
采纳率:100%
帮助的人:47.2万
展开全部
int a = b+1的时候,b是什么?没有定义啊!倒过来试试!要么在a = b +1 之前 int b; int a = b +1 ; b =1;
追问
我知道应该这样啊,但是按照分配内存和初始化 的顺序来说应该不会错啊?求解释!
追答
你的错误不在分配内存和初始化,在于违背了人家语言的规则!你这样子的写法,有些自然语言的以为,但是目前没有这么只能的语言,所以,我们要掌握一门语言,首先遵守人家的基本规则!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式