黑马程序员技术交流社区
标题:
在java中为什么:int i;i=20;这样错误,而int i=20;这样就正确呢??
[打印本页]
作者:
赵志伟
时间:
2012-3-19 09:44
标题:
在java中为什么:int i;i=20;这样错误,而int i=20;这样就正确呢??
为什么会出现这种情况呢?应该可以为成员变量赋值的呀。
public class text{
int i;
i=20;
}
作者:
段浩亮
时间:
2012-3-19 09:50
这个.....你把赋值语句写在类成员位置当然报错了,类是由成员变量和方法组成的,int i = 20;是定义一个成员变量i,他的初始值是20
而i = 20;是一条赋值语句,不能出现在成员位置上,你把它写在方法里面就不会报错了
作者:
李深山
时间:
2012-3-19 10:06
类是由成员变量和方法组成的,你可以这么写int i = 20,在定义的时候进行初始化,或者在方法内部进行初始化,但是不能在成员之间进行赋值,这样编译器就是会报错的。
作者:
魏明明
时间:
2012-3-19 10:12
在一个类里面可以定义类的成员变量,例如:,int i;也可以定义并且赋值例如:int i = 20;而不能在类的成员变量的位置上先定义在赋值,int i; i=10;
public class text{
int i;
//i=20;不可以,这是赋值语句,不是类的属性
void a(){i=20;}你可以这样
}
作者:
盛祖华
时间:
2012-3-19 10:14
定义的类中i=20;这是赋值语句。类中包含有数据类型和函数,写成int i=20;在类中是合法的,但是不能分开写。
作者:
OMG
时间:
2012-3-19 11:40
哥们,考虑需求:
1,满足数据共享的需求:int i;是声明一个成员变量,被构造函数以及一般成员函数所共享;
2,既然是其他函数锁共享,那么赋值或者调用,都是在函数中进行;
总之,声明在成员位置,赋值和调用在局部位置;ok?
作者:
杨华威
时间:
2012-3-19 11:47
i=20是一条赋值语句,不能放在成员位置上。应该在定义时初始化,或者放在方法里面。
还有,既然可以定义时赋值,你为什么又单独在后面赋值呢?java不允许这样繁琐无用的语句。
作者:
刘旭
时间:
2012-3-19 12:09
语句是不能定义在类里面的,得在方法或者代码块里面才行。int i=20;是可以的。
当加载类后,先将i初始化,i=0,然后i再动态初始化,i=20;
作者:
魏群
时间:
2012-3-19 15:43
public class text{
int i;
}这样或
public class text{
int i=20;
}这样是可以的i被当做成员变量有默认初始化值0或默认初始化值20;
而public class text{
int i;
i=20;
}不行 i=20;是一条赋值语句;必须要写在方法里。如果要为成员变量指定初始值可以写在构造方法里。
作者:
刘_浩
时间:
2012-3-19 20:47
缺少主函数呀。可以int i=20;或是int i;i=20;都是可以的。
作者:
许圣建
时间:
2012-3-20 01:37
标题:
JAVA大括号的层次性结构
查了很多地方,还是搞不清楚深层次的东西,头皮都抓破了,还是把我思考的东西发出来,虽然楼层很深了,不一定有哥们看得到:
java语言是一层又一层的大括号构成的,这是它的分层结构特点,不同的层次编译器给予不同的约束。
我们看一个类的对象创建时第一部是做什么?开辟内存空间,是不是?
(这里为了简化,不考虑静态和主函数的特殊情况,而且我一直觉得将主函数放在随便一个类之中都可以这种设定并不好,
如果使其特殊化,设定一个类其中只有主函数,这样结构会更加清晰)
那么我想这是第一层大括号所要做的约束,需要开辟空间的同志,请那好您的标识符,进入候车厅(第一层大括号)。
注意:局部变量不在第一层开辟空间是故意延后,你想开辟也是没问题的,拿出来放在第一层就好了。
现在我们已经把包括局部变量的开辟空间动作都做完了,接下来要作什么?
对开辟的空间进行自定义初始化,这就是第二层大括号了,这一层可以没有,因为自动初始化动作已经做完了,如果你要自己初始化的话,这就是第二层大括号;
int i=20;这句话并不是一次完成的,他的赋值也是属于第二大括号的时间上的,这应该只是java的简化写法问题,简化书写而已,底层实现并不是一句执行语句就搞定的。
还有一种第二层大括号就是成员方法的大括号,如果说上面的大括号是地雷,踩了就炸,那么这个大括号就是手雷了,拉了才炸,甚至拉完还要在钢盔上枪杆上磕一下才炸,
这就是成员方法的大括号了,只有当被访问时才执行,也许在很多层大括号之后才可能被拉响,但是你已经可以随时拉引线了。但是这个引线不可能高于第二层,因为第一层的时候,还没有准备好手雷,引线也就无从说起。第二层的初始化大括号里是可以拉引线的,也许我拿到引线的时候手雷还没准备好,但我可以等一等,总会很快准备好的。
希望有对此有自己认识的同学老师,可以告诉我你们的看法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2