我是Java的完全新手,也是创建游戏Snake的过程。在游戏中我创建了一个Board类,这个类的作用是创建一个JFrame来提供可视化表示(据我所知)。我的问题在于我对代码缺乏了解。我不确定"公共静态板?"确实。我以为它创建了一个董事会类的静态实例,但我相信这不是正确的。
我也在努力使用线路" board = new Board();",根据我的理解,这会在Board类中创建一个构造实例,但是,我不确定为什么我们将此分配给" board"。
public class Game {
/**
* @author HyperBlue
*/
//Declaring a static instance/object of Board, this can be accessed from anywhere in the program. The fact that it is static means that it cannot be edited. -- Not sure if right definition
public static Board board;
public static void main(String[] args) {
// TODO Auto-generated method stub
//Creates a static object board
board = new Board();
}
}
编辑:鉴于此,我是否正确地认为public JFrame frame;
没有创建一个名为frame的JFrame新实例?如果没有,那么它是否会创建一个我可以操作的变量?
答案 0 :(得分:2)
行public static Board board;
声明一个可以引用电路板的变量。在某种程度上,把它想象成一个盒子 - 你创建了一个空盒子。它没有任何内容,但你现在有能力把东西放在那个盒子里。
声明的每个部分都会告诉你关于这个方框的一些信息:
Board
- 只有Board
类型的内容适合方框。board
"。如果要引用此框的内容,请使用名称board
。您认为board = new Board();
创建Board
的实例是正确的。具体来说,new Board();
部分是创建新Board
实例的部分。通过说board = new Board();
,您将新实例放在前面声明的标记为board
的框中。从现在开始,您可以通过名称board
或此类之外的Game.board
来引用您创建的电路板。同样重要的是要知道board = new Board()
,board
的先前内容(如果有的话)现在已经丢失了。你倾倒了盒子,所以你可以在里面放一个新的物体。显然,这里没有任何东西,但是当你在任何面向对象的语言(例如java)中前进时,要记住这一点。
答案 1 :(得分:1)
当你把
public static Board board;
这意味着在Java程序中有一个类级别(静态)引用,它被命名为board。它可以容纳一个Board实例。 但是,除非您为该引用分配实例,否则它将指向任何内容。它只是记忆中的一个参考。
当代码
board = new Board();
被执行。 JVM创建Board类的实例,然后将创建的实例分配给早期提到的板参考。 所以最后板引用现在指向Board类实例。 由于它是静态的和公共的,因此您可以从具有类名的任何位置访问它。 e.g。
Game.board
答案 2 :(得分:1)
第一个问题:
public static Board board;
到目前为止,您已声明具有公共可见性的Board类型的引用变量。它可以通过Game.Board随处访问。 static修饰符意味着它附加到类(就像不需要运行类的实例的静态方法,即static void main(String[] args)
)。如果没有使用=为引用赋值,它只是在内存中为引用分配。它没有任何意义。但它会在主要执行之后。
第二个问题。
board = new Board();
在java中,首先评估任何等号(=)的右侧,因此new Board()
是首先发生的事情。它在Board类型的内存中创建一个新对象,并调用board类的默认构造函数(可能将所有实例变量设置为默认值。最后,对象的引用,指向它的东西,被分配给board变量那么现在,board.myMethod();
将为Board所引用的特定实例调用Board类的方法myMethod。
听起来很神秘,但这很重要。此外,有时这些步骤合并:
Human bob = new Human(); //default constructor (bob.name() == "name")
Human alice = new Human("alice"); //different constructor (alice.name() == "alice")
仅作为一个例子。