Как переменные предназначены для использования в Java? - PullRequest
1 голос
/ 07 марта 2012

В свободное время я изучал Java в течение прошлого года, и до сих пор я не сталкивался с тем, как правильно использовать переменные.Под этим, я имею в виду, должен ли я использовать переменные экземпляра или просто использовать переменные в одном методе.

Например, это фрагмент кода, который я написал:

public class arsenalTroop {
    String[][] troopStats;
String[][] weaponStats;
String[][] armorStats;
String[][] animalStats;
String[] troops;
String[] weapon;
String[] armor;
String[] animal;
JLabel[] troopsArray;
int troopTotal;
int weaponTotal;
int armorTotal;
int lordTotal;
int animalTotal;

JFrame arsenalLordFrame = new JFrame();
JTextField name = new JTextField();
JLayeredPane lP = new JLayeredPane();
JLayeredPane fP = new JLayeredPane();
JLayeredPane ldP= new JLayeredPane();
JLabel siegeLabel = new JLabel();
JComboBox weaponCB;
JComboBox armorCB;
JComboBox animalCB;
JLabel siegeText = new JLabel();
JButton addWep = new JButton();
JButton addName = new JButton();
JButton addArmor = new JButton();
JButton addAnimal = new JButton();
JButton ntr = new JButton();
JButton nwe = new JButton();
JButton nar = new JButton();
JButton nan = new JButton();

JButton newWeaponButtonArray[] = new JButton[6];
JButton newArmorButtonArray[] = new JButton[6];
JButton newAnimalButtonArray[] = new JButton[6];

Border whiteBorder = BorderFactory.createLineBorder(Color.white);
Border greyBorder = BorderFactory.createLineBorder(Color.gray);

boolean[] weaponFree = new boolean[6];
boolean[] armorFree = new boolean[6];
boolean[] animalFree = new boolean[6];

JButton done = new JButton();

public void arsenalTroopGui() {

Как вы можете видеть, все переменные, которые я собираюсь использовать, являются переменными экземпляра, поэтому я спрашиваю, должен ли я сделать это, или я должен попытаться ограничить большинство моих переменных в каждом методе, которыйони будут использоваться в?

Ответы [ 4 ]

5 голосов
/ 07 марта 2012

Практическое правило: переменные должны объявляться в наименьшей возможной области видимости.

4 голосов
/ 07 марта 2012

Вы должны использовать переменные экземпляра [fields], если у класса есть состояние, и это важно для него.

Вы должны использовать локальные переменные [или переменные метода], когда они специфичны для каждого запуска метода.

Обратите внимание, что это не только проблема стиля кодирования , подумайте, что произойдет, если вы объявите все свои переменные как переменные экземпляра - и затем дважды запустите метод дважды ,Это вызовет вызовы методов для изменения переменных друг друга, в то время как эта проблема не возникает для локальных переменных.

1 голос
/ 07 марта 2012

У Java есть термин "область".Мы можем подразумевать область действия как жизненный диапазон любого объекта или переменной.Ниже приведены некоторые области видимости. Область действия класса (переменная экземпляра) Область действия метода (переменная метода) и т. Д. *

Как вы должны знать, каждый объект или переменная потребляют память в течение своего срока службы.поэтому нам нужно максимально ограничить время жизни объекта или переменной (на самом деле примитивных данных), чтобы оптимизировать использование памяти.

Поэтому постарайтесь максимально приблизить переменную к методу.

1 голос
/ 07 марта 2012

Это настолько нормально и распространено, что в классах с графическим интерфейсом, которые реализованы Swing, есть много полей в масштабах всего класса из-за объявлений компонентов макета. Не нужно беспокоиться об этом.

Просто убедитесь, что вы разработали свои классы как можно более атомарными и независимыми. Вы можете достичь этого, подумав при объявлении вашей переменной, чтобы решить, нужна ли она в более узкой области, скажем, специфической для метода (локальной переменной) или класса, пакета и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...