Java - 访问全局变量和;数组

时间:2010-12-15 15:54:41

标签: java arrays global-variables

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

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

  1. Optrader.java
  2. OptraderGlobals
  3. 我的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中其他类中的全局数组数据。

5 个答案:

答案 0 :(得分:0)

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

static String[] columnNames = ...

static Object[][] data = ...

如果没有static关键字,则这些字段属于OptraderGlobal实例,而不属于类本身。

答案 1 :(得分:0)

使columnNames成为静态。

答案 2 :(得分:0)

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

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

我建议你看一下处理Object oriented programming的一些资源 - 这个错误,以及你的整体设计(即全局通常是一个坏主意),表明可能缺乏对这些的熟悉原则。由于Java是一种面向对象的语言,熟悉这种风格将无助于你。

答案 3 :(得分:0)

您需要将它们声明为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)};
                     }

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

答案 4 :(得分:0)

您必须详细了解member fields in Java

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