Соглашения о переменных Java - PullRequest
0 голосов
/ 06 ноября 2011

Я запутался с объявлениями переменных в коде Java.

Я прочитал ... не пытайтесь использовать объявления глобальных переменных.

Не используйте что-то вроде этого:

package cls;
public class test { 
   private String var;

   public someMethod(){ ... } 
}

А пользуетесь?

package cls;
public class test { 

   public someMethod(){ 
       String var = null;
   } 
}

Я не знаю, какой правильный путь ....

Ответы [ 4 ]

2 голосов
/ 06 ноября 2011

Это полностью зависит от того, что вам нужно.

Однако ваш первый пример - это не глобальная переменная - это переменная экземпляра.

Переменные должны иметь такую ​​же маленькую область видимости, как и переменная.возможный.Это упрощает анализ кода.

Переменные экземпляра имеют ключевое значение для ООП - существуют классы (объекты) для инкапсуляции состояния объекта и методы, которые работают с этим состоянием.Например, класс Person может иметь переменные экземпляра имени и фамилии:

public class Person {
    private String firstName;
    private String lastName;
    // Plus getters and setters for each.
}

Это позволяет методам экземпляра напрямую обращаться к переменным имени и фамилии без необходимости передавать их между всеми методами, которыенужны они.

Второй пример - локальная переменная.Он виден только в методе, в котором он объявлен. Ссылка на него может быть передана другим методам.

1 голос
/ 06 ноября 2011

Вы не можете иметь по-настоящему «глобальные» переменные в Java так же, как в языке, таком как C. Java вынуждает вас структурировать вашу программу объектно-ориентированным способом.

В вашем примеревыше, если var требуется для всего объекта test и важно сохранить его, тогда вы должны использовать первый пример.Если var требуется только в someMethod и для объекта test не важно хранить его, используйте второй пример.

Обратите внимание, что даже в первом примере var - это инкапсулирован в объекте test, поэтому он на самом деле не является "глобальным" вообще, за исключением, может быть, незначительно функции-члена test (которая является целой точкой переменных экземпляра / члена).*

В Java ближе всего к "глобальным" данным есть что-то вроде:

public class GlobalVars {
   public static int globalInt;
}

И вы можете получить доступ к globalInt по всему коду как GlobalVars.globalInt, не создавая экземпляр GlobalVars.

1 голос
/ 06 ноября 2011

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

1 голос
/ 06 ноября 2011

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

Второй - это переменная области видимости метода.Это только для временных целей, чтобы выполнить вычисления, необходимые для работы метода, и как только код в методе сделан, переменная исчезает.

Вы используете каждый для различных целей.Например, если вы пишете класс Car, у вас, вероятно, будет поле класса для SteeringWheel и Brake.Но если у вас есть метод для расчета среднего числа миль на галлон, вы можете создать переменную области действия метода, чтобы помочь выполнить вычисление.

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