2014-12-31 3 views
0

Я полный новичок в Java и в процессе создания игры Snake. В игре я создал класс Board, что делает этот класс, он создает JFrame для визуального представления (насколько мне известно). Мой вопрос заключается в отсутствии понимания кода. Я не уверен, что такое «публичная статическая доска правления»; делает. Я думал, что он создал статический экземпляр класса Board, хотя, я считаю, что это неверно.Недоразумение экземпляров и деклараций

Я также борюсь с линией «board = new 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(); 

} 

} 

EDIT: Учитывая это, я прав, полагая, что public JFrame frame; не создает новый экземпляр JFrame называется кадр? Если нет, то создает ли она переменную, с которой я могу манипулировать?

ответ

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).

+0

Разница важна. Переменная может * содержать * рефери CE (тип значения) и переменный могут - расширение - можно использовать для * см * на объект, который соответствует непрозрачному опорному значению. Термин «refer» (глагол) описывает действие здесь и не связан напрямую с «ссылкой» (существительным), что немного запутывает. – user2864740

1

Когда вы

public static Board board; 

Это означает, что в вашей программе Java есть уровень класса (статическая) ссылка, который назван в качестве платы. Он может содержать экземпляр Совета. Но пока вы не назначите экземпляр этой ссылке, он ничего не укажет. Это просто справочная информация в памяти.

Когда код

board = new Board(); 

получить казнены.JVM создает экземпляр класса Board, а затем назначает этот созданный экземпляр ссылкой на доску, которая упоминается раньше. Итак, наконец, ссылка на доску теперь указывает на экземпляр класса Board. Поскольку он является статическим и общедоступным, вы можете получить доступ к нему из любого места с именем класса. , например.

Game.board 
1

Первый вопрос:

public static Board board; 

До сих пор, вы объявили ссылочную переменную типа Совета с информированием общественности. Доступ к нему можно получить в любом месте Game.Board. Статический модификатор означает, что он привязан к классу (например, статические методы, для которых не требуется экземпляр класса для запуска, т. Е. static void main(String[] args)). Не присваивая ссылку ссылочной позиции с помощью =, это просто распределение в памяти для ссылки. Это ни на что не указывает. Но это будет после основного выполнения.

Второй вопрос.

board = new Board(); 

В Java, правая сторона любой знак равенства (=) вычисляется первым, так new Board() это первое, что происходит. Он создает новый объект в памяти типа Board и вызывает конструктор по умолчанию для класса платы (предположительно устанавливая все переменные экземпляра в значения по умолчанию). Наконец, ссылка на объект, то, что указывает на него, присваивается переменной платы . Так что теперь, board.myMethod(); бы вызвать метод MyMethod класса Board для конкретного экземпляра его называет правлением

это звучит эзотерическим, но важно также, иногда эти шаги комбинируются:..

Human bob = new Human(); //default constructor (bob.name() == "name") 
Human alice = new Human("alice"); //different constructor (alice.name() == "alice") 

Как пример.

Смежные вопросы