Static/Class 变量和 GUI

Static/Class Variables and GUI

我最近因为学术目的被拉回 Java 编程,并且我 运行 在我的第一个项目中遇到了一些有趣的事情。

我必须为带有执行各种任务的按钮的店面设计一个 GUI,我注意到我的变量发生了一些奇怪的事情。我的按钮通过它们的操作更改的任何 CLASS 变量都不需要声明为静态,而我的主要方法触及的任何 CLASS 变量都必须声明为静态。

这是为什么?我的 Main 方法和 ActionListener 方法都处于同一执行级别。 (它们都在同一个 class 中,其中 none 个嵌入彼此)

我希望这个问题不要太过分obvious/dumb,我正在尝试尽可能多地重新学习Java。

您的主要方法是静态的,这意味着它不是 运行 对象的实例,该方法在 class 上调用而没有 [=20= 的对象] 实例化。这对于 main 方法有一定的意义,因为它是您的程序首先执行的操作,因此无法实例化对象。

静态方法和变量存在于 class 本身,而实例成员是(非静态)变量,它们是从 class 创建的每个对象的一部分。每个对象都有自己的为 class 声明的实例变量副本,为每个对象提供自己的状态。由于静态变量在 class 上,并且 class 只有一个副本(它只被 classloader 加载一次),因此每个静态变量只有一个。

我用"class variable"来引用静态变量,用"instance variable"来引用非静态变量。

在 Swing GUI 编程中,几乎没有理由使用静态变量,我的建议是尽可能避免使用它们,因为全局可变状态很难看并且难以调试。在 Swing 中,所有 UI 组件和侦听器都是对象,一旦您的 main 方法初始化并显示主 jframe,通常不需要其他静态方法或变量。