面向对象语言中的全局变量

时间:2014-04-18 19:09:46

标签: java variables netbeans global-variables

我正在研究一个ASCII检查器程序,我正在试图弄清楚我应该如何存储我的电路板状态。显然我需要一个2d int / short数组(对于状态'black','white','empty'),但我不知道如何声明这个,所以它可以从程序中的任何地方访问,比如我可能需要。

在我过去使用的过程语言中,全局变量很容易,但显然Java中的全局变量是一种非常糟糕的做法。另外,我在一个java文件的约束下工作,所以我不知道这是否限制了我的选择。我在NetBeans工作,对于这个任务,它应该是一个.java文件。

现在我只是在我班级的主要方法之前使用public static int[][] checkersBoard;。我很确定这是不好的做法,但

谢谢!

P.S。这是一个额外的问题,这就是为什么我没有被教导如何做到这一点:P

2 个答案:

答案 0 :(得分:1)

OO语言中有一个常用的中间层,它是一个实例变量。事实上,这是OO语言的一个特色,它们使它们如此强大。

您可以设计自己的课程,只需拥有public int[][] board,从操作游戏状态的所有方法中删除static修饰符。

如果您的类名为CheckerGame,则可以在main方法中实例化new CheckerGame(),并在其上调用方法。以下非感性示例应该让您入门:

public class CheckerGame {
    public int[][] board;
    public int getBoard(int row, int col){
        return board[row][col];
    }
    public void setBoard(int row, int col, int val){
        board[row][col] = val;
    }

    public CheckerGame(){ board = new int[8][8];

    public static void main(String... argv){
        CheckerGame game = new CheckerGame();
        game.setBoard(1,2,0);
    }

}

然后,您可以添加新方法来操作实例(例如moveChecker和checkWin),允许您重用和组织功能。

答案 1 :(得分:1)

全局变量的问题只出现在较大的项目中,在这些项目中,很难跟踪哪些代码行触及全局状态以及按什么顺序排列。

由于你只有一个课程,这不会造成麻烦,因为该变量在技术上甚至不是全局的:你可以根据需要设置private

有了这么小的例子,很难证明非静态变量的合理性。基本上,你的任务太小,无法让你观察到OOP的好处。