java gui变量_关于java:静态/类变量和GUI

本问题已经有最佳答案,请猛点这里访问。

最近,我被拉回到了Java编程的学术目的,我遇到了一些有趣的在我的第一个项目。

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

为什么会这样?我的主要方法和ActionListener方法都在相同的执行级别上。(它们都在同一个类中,没有一个嵌入到彼此中)

我希望这个问题不太明显/愚蠢,我试图尽可能多地重新学习Java。

主要方法本身是静态的。操作侦听器方法不是。

那么,在Java中,静态方法只能访问静态(或本地)变量吗?

附加说明,但术语"类变量"用于引用静态字段。没有非静态类变量这样的东西。我想你在找"field"或"attribute"或"property"这个词。

@很高兴知道。我强调了单词class,因为我不希望它与局部(方法级别)变量混淆。

您的主要方法是静态的,这意味着它不是在对象的实例上运行的,方法是在类上调用的,而没有实例化类的对象。对于一个主方法来说,这是有一定意义的,因为它是程序做的第一件事,所以没有办法实例化一个对象。

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

我使用"类变量"指静态变量,"实例变量"指非静态变量。

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

嗯,我想作为经验法则,我应该避免在主方法中加载重要的变量,这样我就不必声明它们是静态的了?

@用户3303680:在我编写的Swing程序中,通常主要的方法只是创建一个窗口并显示它。在没有看到代码的情况下很难给出更多的建议。

在创建窗口之前,我将文件I/O代码放在主方法中,而不必太详细。这是为了从一个文本文件将我虚构的商店的库存加载到数组中。

@用户3303680:这是有道理的。您也可以将您读入的清单传递到jframe子类对象中,或者让jframe在初始化时自己完成工作。但关键是静态意味着类级别,非静态成员属于特定的实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值