在过去的一年里,我一直在空闲时间学习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() {
正如您所看到的,我将要使用的所有变量都是实例变量,所以我要问的是,我应该这样做,还是应该尝试将大多数变量限制在每个方法中他们会被用在哪里?
答案 0 :(得分:5)
经验法则:变量应在尽可能小的范围内声明。
答案 1 :(得分:4)
如果类有状态,你应该使用实例变量[fields],这对它很重要。
当特定于每次运行方法时,您应该使用局部变量[或方法变量]。
请注意,不仅仅是编码样式问题,想想如果将所有变量声明为实例变量会发生什么 - 然后同时运行一个方法。它会导致方法的调用改变彼此的变量,而局部变量不会发生这个问题。
答案 2 :(得分:1)
由于布局组件声明,在Swing实现的GUI类中,在类范围范围内有很多字段,这是很正常和常见的。无需担心。
请确保您已将类设计为尽可能原子和独立。你可以通过在声明变量时加入一些想法来决定是否需要在更窄的范围内,比如特定于方法(局部变量)或类,包等等。
答案 3 :(得分:1)
Java有术语范围。我们可以将范围表示为任何对象或变量的生命范围。 部分范围如下─ 类范围(实例变量) 方法范围(方法变量)等......
正如您应该知道每个对象或变量在其生命周期中消耗内存。所以我们需要尽可能地限制对象或变量(实际上是原始数据)的生命周期,以优化内存利用率。
所以尽量把变量放到方法中。