Static/Class Variables and GUI
本问题已经有最佳答案,请猛点这里访问。
最近,我被拉回到了Java编程的学术目的,我遇到了一些有趣的在我的第一个项目。
我必须为一个店面设计一个图形用户界面,其中有执行各种任务的按钮,我注意到我的变量发生了一些奇怪的事情。我的按钮通过它们的操作更改的任何类变量都不需要声明为静态变量,而我的主要方法所涉及的任何类变量都必须声明为静态变量。
为什么会这样?我的主要方法和ActionListener方法都在相同的执行级别上。(它们都在同一个类中,没有一个嵌入到彼此中)
我希望这个问题不太明显/愚蠢,我试图尽可能多地重新学习Java。
您的主要方法是静态的,这意味着它不是在对象的实例上运行的,方法是在类上调用的,而没有实例化类的对象。对于一个主方法来说,这是有一定意义的,因为它是程序做的第一件事,所以没有办法实例化一个对象。
静态方法和变量存在于类本身,而实例成员是(非静态)变量,它们是从类创建的每个对象的一部分。每个对象都有自己为该类声明的实例变量的副本,为每个对象提供自己的状态。因为静态变量在类上,并且类只有一个副本(类加载器只加载一次),所以每个静态变量只有一个。
我使用"类变量"指静态变量,"实例变量"指非静态变量。
在Swing GUI编程中,很少有理由使用静态变量,我的建议是尽可能避免使用静态变量,因为全局可变状态很难看,而且很难调试。在Swing中,所有的UI组件和监听器都是对象,一旦主方法初始化并显示一个主JFrame,通常就不需要其他静态方法或变量。