在方法中使用类变量

时间:2012-10-25 02:15:53

标签: java class variables

在java中如何在方法中使用类变量?

这是我的代码

public class ExamQ3a {
    String[] descriptionArr = new String[50];
    static int[] codeArr = new int[50];

    public static void displayItems(int count, int[] codeArr,
            String[] descriptionArr) {
        count = this.codeArr.length;
        for (int i = codeArr.length; i < codeArr.length; i--) {

        }
    }
}

这里突出显示的行是count = this.codeArr.length;我得到的错误是无法从静态上下文引用非静态变量。但我已经将变量设为静态。那是什么给出了什么?

所以只按要求!不是我想问整个问题,只是为了知道我为什么要使用静态,这是一个练习题

  

您将开发一个简单的应用程序系统来管理库存   在一家公司。系统应该能够保持最多50个列表   项目。每个项目都有唯一的整数代码和描述。

     

(a)编写声明并创建两个数组来存储的Java语句   代码和项目的描述。

     

(b)使用以下方法签名编写Java方法:

     

public static void displayItems(int count,int [] codeArr,String [] descriptionArr)

     

此方法显示公司中所有项目的代码和说明   以表格形式,带有适当的列标题。

     

参数:codeArr:存储项目代码的数组

     

descriptionArr:存储项目描述的数组

     

count:系统中的项目数

3 个答案:

答案 0 :(得分:5)

静态世界中没有this。摆脱它。要解释一下,this指的是当前的实例,当您处理静态方法或变量时,您正在处理与该类关联的项,而不是任何一个特定实例。所以将代码更改为:

count = codeArr.length;

编辑1
顺便说一句,你不想把像} } }那样的结束括号拼凑起来,这使你的代码很难阅读和遵循。白色空间是免费的,因此不妨明智地使用它来提高代码的可读性。

编辑2
你说:

  

那么如何将数组codeArr引用到类变量codeArr?

你在这个类中,并且不需要在这里使用类变量名,因为假定它被使用。只需使用静态变量或方法名称,你应该是金色的。

编辑3
对这种类型的变量使用静态会给代码带来难闻的气味。我认为如果这是一个实例变量而不是静态变量,那么整个程序会好得多。有关这方面的更多讨论,您可以告诉我们为什么您决定将变量设为静态。

答案 1 :(得分:1)

您是否要引用与方法参数同名的静态变量,并将静态变量作为类的名称添加前缀。在这种情况下,它将是ExamQ3a.codeArr

另一种处理方法是为方法参数选择不同的名称,或者为实例/静态变量开始使用公共前缀。

答案 2 :(得分:1)

需要注意的另一点是,在下面的代码中, statement1 永远不会被执行:

for (int i = codeArr.length; i < codeArr.length; i--) { statement1; }

它应该是

int length = codeArr.length;
for (int i = 0; i < length; i++) { ... }

int length = codeArr.length;
for (int i = (length-1); i > -1 ; i--) { ... }