繁体   English   中英

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

[英]Global Variables in Object Oriented languages

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

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

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

谢谢!

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

在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),从而允许您重用和组织功能。

全局变量的问题仅在较大的项目中出现,在这些项目中,难以追踪哪些代码行触及全局状态以及以何种顺序触及。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM