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;

请老师解释这种现象?是因为静态的默认初始化了吗?
在什么时候实现?
...全文
43 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
静态的初始化: 最先是静态的变量,根据他们定义的先后次序.然后是静态函数,根据他们定义的先后次序.

一般不要让系统为你的变量自动赋初值!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧