Глобальные переменные в Java - PullRequest
196 голосов
/ 10 января 2011

Как вы определяете глобальные переменные в Java?

Ответы [ 23 ]

242 голосов
/ 10 января 2011

Чтобы определить глобальную переменную, вы можете использовать статическое ключевое слово

public class Example {
    public static int a;
    public static int b;
}

, теперь вы можете получить доступ к a и b из любого места, вызвав

Example.a;

Example.b;
54 голосов
/ 10 января 2011

Ты не.Это по замыслу.Ты не должен делать это, даже если бы мог.

При этом вы можете создать набор открытых статических членов в классе с именем Globals.

public class Globals {
   public static int globalInt = 0;
   ///
}

но вы действительно не должны :).Серьезно .. не делай этого.

39 голосов
/ 12 мая 2012

Другой способ - создать интерфейс, подобный следующему:

public interface GlobalConstants
{
  String name = "Chilly Billy";
  String address = "10 Chicken head Lane";
}

Любой класс, которому нужно их использовать, должен реализовывать только интерфейс:

public class GlobalImpl implements GlobalConstants
{
  public GlobalImpl()
  {
     System.out.println(name);
  }
}
21 голосов
/ 10 января 2011

Вам лучше использовать внедрение зависимостей:

public class Globals {
    public int a;
    public int b;
}

public class UsesGlobals {
    private final Globals globals;
    public UsesGlobals(Globals globals) {
        this.globals = globals;
    }
}
9 голосов
/ 31 мая 2013

По правде говоря, в java OO-программе нет понятия "GLOBAL"

Тем не менее, в вашем вопросе есть доля правды, потому что в некоторых случаях вы захотите запуститьметод в любой части программы.Например, метод random () в приложении Phrase-O-Matic; этот метод должен вызываться из любой точки программы.

Таким образом, чтобы удовлетворить такие вещи, как «Выше», нам нужно иметьГлобальные переменные и методы "

ДЛЯ ОБЪЯВЛЕНИЯ ПЕРЕМЕННОГО КАК ГЛОБАЛЬНОГО.

 1.Mark the variable as public static final While declaring.

ДЛЯ ОБЪЯВЛЕНИЯ МЕТОДА КАК ГЛОБАЛЬНОГО .

 1. Mark the method as public static While declaring.

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

ClassName.X

ПРИМЕЧАНИЕ.: X может быть либо именем метода, либо именем переменной согласно требованию, а ClassName - это имя класса, в котором вы их объявили.

9 голосов
/ 25 июля 2013

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

Причина, по которой вы используете геттеры и сеттеры таким образом, вместо того, чтобы просто сделать переменную общедоступной, заключается в следующем. Допустим, ваш var будет глобальным параметром, который вы НИКОГДА не хотите, чтобы кто-то изменил во время выполнения вашей программы (в случае, когда вы разрабатываете код с командой), что-то вроде, возможно, URL-адреса веб-сайта. Теоретически это может измениться и может использоваться много раз в вашей программе, поэтому вы хотите использовать глобальную переменную, чтобы иметь возможность обновлять все сразу. Но вы не хотите, чтобы кто-то другой вошел и изменил эту переменную (возможно, даже не осознавая, насколько это важно). В этом случае вы просто не включаете метод установки, а включаете только метод получения.

public class Global{
    private static int var = 5;

    public static int getVar(){
        return Global.var;
    }

    //If you do not want to change the var ever then do not include this
    public static void setVar(int var){
        Global.var = var;
    }
}
8 голосов
/ 15 июля 2013

Ничто не должно быть глобальным, кроме констант.

public class MyMainClass {
    public final static boolean DEBUGMODE=true;
}

Поместите это в свой основной класс. В других файлах .java используйте его через:

if(MyMainClass.DEBUGMODE) System.out.println("Some debugging info");

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

Если у вас есть метод рабочей лошадки, такой как рандомизатор, я предлагаю создать пакет "Toolbox"! У всех кодеров должен быть один, тогда, когда вы захотите использовать его в .java, просто импортируйте его!

7 голосов
/ 14 апреля 2015

В Java нет глобальной переменной

Тем не менее, у нас есть ключевое слово static, и это все, что нам нужно.Ничто не существует вне класса в Java.Ключевое слово static представляет переменную класса, которая, в отличие от переменной экземпляра, имеет только одну копию и которая распространяется на все экземпляры этого созданного класса, что означает, что ее значение можно изменить и получить доступ ко всем экземплярам в любой точке.

Если вам нужна глобальная переменная, к которой можно получить доступ за пределами области действия, то эта переменная вам нужна, но ее область действия существует только там, где находится класс, и это будет все.

5 голосов
/ 10 января 2011

В Java нет такой вещи, как действительно глобальная переменная.Каждая статическая переменная должна принадлежать какому-то классу (например, System.out), но когда вы определили, в какой класс она будет входить, вы можете ссылаться на нее из любого места, загруженного одним и тем же загрузчиком классов.

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

3 голосов
/ 10 января 2011
public class GlobalClass {
     public static int x = 37;
     public static String s = "aaa";
}

Таким образом, вы можете получить к ним доступ с помощью GlobalClass.x и GlobalClass.s

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