2

在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:系统中的项目数

4

3 回答 3

5

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

count = codeArr.length;

编辑 1
顺便说一句,您不希望像} } }这样使您的代码很难阅读和遵循的右大括号捆绑在一起。空白是免费的,所以不妨明智地使用它来提高代码的可读性。

编辑 2
你说:

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

你在类里面,这里没有必要使用类变量名,因为它被假定使用了。只需使用静态变量或方法名称,你就应该是金子了。

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

于 2012-10-25T02:16:48.007 回答
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--) { ... }
于 2012-10-25T06:35:01.037 回答
1

您是否要引用与方法参数同名的静态变量,您在静态变量前面加上类的名称。在这种情况下,它会是ExamQ3a.codeArr

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

于 2012-10-25T02:24:31.870 回答