static变量

ladofwind 中国国际金融有限公司 研发部经理  2003-12-12 11:49:56
public class Test{
public static void main(String[] args){
int i;
i=i+1;
System.out.println(i);
}
}
编译不通过,i未初始化
public class Test{
static int i;
public static void main(String[] args){
i=i+1;
System.out.println(i);
}
}
编译通过,运行输出 1;

请老师解释这种现象?是因为静态的默认初始化了吗?
在什么时候实现?
...全文
28 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ladofwind 2003-12-12
thanks,接分吧大家:)
  • 打赏
  • 举报
回复
4y8 2003-12-12
这个跟static无关
一个变量做为成员变量(即类变量)时,你不做初始化,编译的时候自动帮你初始化的,
原理类型初始为0
对象类型初始为null
如果你的变量是局部变量,如你上面的在方法中定义的变量则一定要初始化才能编译通过.

----------

同意
  • 打赏
  • 举报
回复
CTAer 2003-12-12
对,和static无关
当一个变量作为成员变量出现时,如果不显式地赋初值,系统会给它赋一个默认的初值.
而作为一个方法中的局部变量,在你没给它赋初值时,系统不会自动给它赋初值.
另外,系统默认给予的初值根据不同的数据类型而不同. int 默认为0
  • 打赏
  • 举报
回复
angelface 2003-12-12
up
  • 打赏
  • 举报
回复
cql0007 2003-12-12
这个跟static无关
一个变量做为成员变量(即类变量)时,你不做初始化,编译的时候自动帮你初始化的,
原理类型初始为0
对象类型初始为null
如果你的变量是局部变量,如你上面的在方法中定义的变量则一定要初始化才能编译通过.
  • 打赏
  • 举报
回复
zkjbeyond 2003-12-12
你说的OK。
  • 打赏
  • 举报
回复
flyspider 2003-12-12
楼主的两个例子有着明显的差别:

第一个是局部变量,必须显式初始化
第二个是成员变量,如果你不显式初始化他,Java会在实例创建过程中默认初始化之。

所以有你上面的差别。
  • 打赏
  • 举报
回复
kinzey34 2003-12-12
没错,自己显式给变量赋值是个好习惯
  • 打赏
  • 举报
回复
seaman0916 2003-12-12
静态的初始化: 最先是静态的变量,根据他们定义的先后次序.然后是静态函数,根据他们定义的先后次序.

一般不要让系统为你的变量自动赋初值!
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2003-12-12 11:49
社区公告
暂无公告