Java 只允许全局变量是静态的?

标签 java global-variables

所以我刚开始编写我正在编写的 Java 程序,它告诉我我的全局变量需要是静态的。我不明白为什么它会告诉我这个,因为我以前开发过 Java 程序而不必将我的全局变量设为静态。有人可以帮忙吗?

 import java.awt.event.*;
 import javax.swing.*;

 public class PlannerMain {
      JFrame frame;
      JButton makeMap;

      public static void main(String[] args){
           frame = new JFrame("Land Planner");
           makeMap = new JButton("Make Map");
           makeMap.addActionListener(new makeMapListener());
           frame.setSize(580,550);
           frame.setVisible(true);
      }

      class makeMapListener implements ActionListener{

              public void actionPerformed(ActionEvent e) {

              }
      }

}

最佳答案

您的main 方法是static,因此它只能直接访问类的static 字段。否则,您需要先创建一个 PlannerMain 的实例,然后您才能访问它的字段。即

public static void main(String[] args){
  PlannerMain planner = new PlannerMain();
  planner.frame = new JFrame("Land Planner");
  planner.makeMap = new JButton("Make Map");
  planner.makeMap.addActionListener(new makeMapListener());
  ...
}

请注意,此类初始化代码最好放在构造函数 方法中。

顺便说一句,您引用的变量不是全局的。现在,您创建的PlannerMain 实例数量与framemakeMap 数量相同。如果您将它们声明为 public static,它们只会是“全局的”(或者它在 Java 中最接近的等价物)——在这种情况下,所有 PlannerMain 实例将共享相同的 frame makeMap,外部世界也会看到它们。

关于Java 只允许全局变量是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4909901/

相关文章:

java - 如何暂停具有 main() 的程序,直到按下 GUI 中的按钮?

c - 使用中断处理程序时如何避免使用全局变量?

c++ - 为什么全局 const char 需要 "static"而 bool 不需要?

c++ - 封装在 DLL 中的类

java - 如何检查生成的 zip 文件是否损坏?

java反射问题

java - 处理 HTTP 状态码的通用机制

c# - 在 .pgm 图像中提取颜色位的最快方法?

c - 全局变量不能被赋值两次

在 C 中创建未知大小的全局二维数组