Java - 访问全局变量和数组

我有一个关于如何访问全局变量和全局数组信息的简单问题,但我没有运气。

我有两个 Java 文件,但无法访问我的应用程序 Optrader.java 中的字符串和数组信息。

  1. Optrader.java
  2. OptraderGlobals

我的 OptraderGlobal.java 文件:

 class OptraderGlobal
 {
    String[] columnNames
           = {"Ex-Date",
              "Dividend",
              "Actual",
              "Yield (%)"
             };

  Object[][] data  = {
       {"dd/mm/yyyy", new Double(5), new Boolean(false), 
          {"21/12/2013", new Double(5), new Boolean(false)};
       }
}

我的 Optrader.java 文件:

/* Volatility Table Model is  CLASS within Optrader.java */
//Create Volatility Table
class VolatilityTableModel extends AbstractTableModel
{
   public int getColumnCount()
   {
         return OptraderGlobal.columnNames1.length;
    }   
 }

错误:

 non-static variable columnNames cannot be
 referenced from a static context
 return OptraderGlobal.columnNames.length;

我还需要访问 Optrader.java 中其他类中的全局数组数据。

stack overflow Java - Acessing global variables & Arrays
原文答案

答案:

作者头像

如果您希望字段是全局的,则需要将它们声明为静态:

static String[] columnNames = ...

static Object[][] data = ...

如果没有 static 关键字,字段属于 instancesOptraderGlobal 而不是类本身。

作者头像

将 columnNames 设为静态。

作者头像

如果您希望某个类对某个类具有全局性,则需要将其声明为 static 。这意味着该字段与类本身相关联(只有一个副本),而不是为每个实例创建一个新版本。

由于您目前没有这样做,因此您最终在 VolatilityTableModel 中复制了错误 - 如果没有 OptraderGlobal 的某些 particular 实例,您将无法引用该字段。

我建议您查看一些处理 Object oriented programming 的资源——无论是这个错误,还是您的整体设计(即全局变量通常是一个坏主意),都表明您可能不熟悉这些原则。由于 Java 是一种面向对象的语言,因此熟悉这种风格对您的帮助无穷无尽。

作者头像

您需要将它们声明为 public static 才能以您想要的方式访问它们。

public static String[] columnNames
           = {"Ex-Date",
              "Dividend",
              "Actual",
              "Yield (%)"
             };

public static Object[][] data  = {
       {"dd/mm/yyyy", new Double(5), new Boolean(false), 
                 {"21/12/2013", new Double(5), new Boolean(false)};
                     }

您也应该将这些类声明为公共的。

作者头像

您必须了解有关 member fields in Java 的更多信息。

在您的情况下,如果您希望它们仅可从其他类访问而不创建 OptTraderGlobal 的实例,则必须使 columnNamesdata static