一个简单的初始化问题,

refuge 2004-04-02 01:37:06
如下一段程序,
public class test{
int var1;
public static void main(String[] args){
int var2=var1;
var2++;
System.out.println("var2="+var2);
}
}
javac时出现test.java:4: non-static variable var1 cannot be referenced from a static context
int var2=var1;
^
1 error
在int var1 前加static时才能通过,why?
...全文
27 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ema 2004-04-02
  • 打赏
  • 举报
回复
-----类型为*的一个对象首次创建时,或者首次访问*类的静态方法/静态字段时,Java解释器必须找到*.class
-----载入*.class后(创建一个Class对象,),它的所有静态初始化模块都会运行。因此,静态初始化仅发生一次——在Class对象首次载入的时候。(即早于实例对象之前)
-----创建一个new test()时,对象的构建进程才会在内存堆(Heap)里为一个Dog对象分配足够多的存储空间,接着进行类的初始化,包括初始化类成员、调用构造函数等。
-----java程序从main函数开始执行,不是从程序开始处。

你的程序中,不new出对象的话,main函数中var1根本无法识别。所以你要么加入static,这样不创建对象,也会被初始化。要么new出一个实例对象来。

《java编程思想》中对类的初始化有很精彩的叙述,建议你去看看。

62,614

社区成员

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

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