Глобальные переменные в Java

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

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

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

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

 Example.a; Example.b; 

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

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

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

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

Другой способ – создать такой интерфейс:

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

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

 public class GlobalImpl implements GlobalConstants { public GlobalImpl() { System.out.println(name); } } 

Вам лучше использовать инъекцию зависимостей:

 public class Globals { public int a; public int b; } public class UsesGlobals { private final Globals globals; public UsesGlobals(Globals globals) { this.globals = globals; } } 

По правде говоря, в программе 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 – это имя classа, в котором вы его объявили.

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

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

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

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

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

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

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

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

 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; } } 

Один, в Java нет глобальной переменной

Два, у нас есть ключевое слово «статическое», и это все, что нам нужно. В Java нет ничего вне classа. Статическое ключевое слово представляет собой переменную classа, которая, напротив переменной экземпляра, имеет только одну копию и выходит за пределы всех экземпляров этого classа, что означает, что ее значение может быть изменено и доступно для всех экземпляров в любой точке. Если вам нужна глобальная переменная, к которой можно получить доступ за пределами области действия, то это необходимая вам переменная, но ее область существует только там, где находится class, и это все.

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

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

 public class GlobalClass { public static int x = 37; public static String s = "aaa"; } 

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

 public class GlobalImpl { public static int global = 5; } 

вы можете звонить куда угодно:

 GlobalImpl.global // 5 

Как вы наверное догадались из ответа, в Java нет глобальных переменных, и единственное, что вы можете сделать, это создать class со статическими членами:

 public class Global { public static int a; } 

Вы можете использовать его с Global.a другом месте. Однако, если вы используете Java 1.5 или выше, вы можете использовать import static магию import static чтобы она выглядела еще больше как реальная глобальная переменная:

 import static test.Global.*; public class UseGlobal { public void foo() { int i = a; } } 

И вуаля !

Теперь это далеко не лучшая практика, так как вы можете видеть в рекламных роликах: не делайте этого дома

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

Обычно глобальная переменная (я предполагаю, что вы сравниваете ее с C, Cpp) определяете как public static final

как

 class GlobalConstant{ public static final String CODE = "cd"; } 

ENUM также полезны в таком сценарии:

Для примера Calendar.JANUARY )

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

Создание независимого файла, например. Example.java, чтобы использовать 1-е решение, отлично. Вы можете сделать это и в приложении, если, например, глобальные переменные являются специальными для вашего текущего приложения и т. Д .:

Создайте class в начале и объявите переменные там:

 class Globals { static int month_number; static String month_name; } 

Затем вы можете получить доступ к этим переменным – используя их как «Globals.month_number» и т. Д. – из любого места в вашем приложении.

По идее глобальные переменные, также известные как переменная экземпляра, являются переменными уровня classа, т. Е. Они определены внутри classа, но вне методов. Чтобы сделать их доступными полностью и использовать их напрямую, укажите ключевое слово static. Поэтому, если я пишу программу для простой арифметической операции и ей нужна пара чисел, тогда две переменные экземпляра определяются как таковые:

 public class Add { static int a; static int b; static int c; public static void main(String arg[]) { c=sum(); System.out.println("Sum is: "+c); } static int sum() { a=20; b=30; return a+b; } } Output: Sum is: 50 

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

 // Get the access of global while retaining priveleges. // You can access variables in one class from another, with provisions. // The primitive must be protected or no modifier (seen in example). // the first class public class farm{ int eggs; // an integer to be set by constructor fox afox; // declaration of a fox object // the constructor inits farm(){ eggs = 4; afox = new fox(); // an instance of a fox object // show count of eggs before the fox arrives System.out.println("Count of eggs before: " + eggs); // call class fox, afox method, pass myFarm as a reference afox.stealEgg(this); // show the farm class, myFarm, primitive value System.out.println("Count of eggs after : " + eggs); } // end constructor public static void main(String[] args){ // instance of a farm class object farm myFarm = new farm(); }; // end main } // end class // the second class public class fox{ // theFarm is the myFarm object instance // any public, protected, or "no modifier" variable is accessible void stealEgg(farm theFarm){ --theFarm.eggs; } } // end class 

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

 public final class Tools { public static int a; public static int b; } 

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

 Tools.a; Tools.b; 

Yoy прав … специально в J2ME … Вы можете избежать NullPointerException, вставив внутри своего конструктора MidLet (прогр. Инициализацию) эту строку кода:

 new Tools(); 

Это гарантирует, что Инструменты будут выделены перед любой инструкцией, которая его использует.

Это оно!

  • возобновление деятельности извещения
  • Получить индексы массива после сортировки?
  • Разрешение на запись на SD-карту
  • Android: добавление текстового представления в линейный макет программно
  • Android - Как создать интерактивный список?
  • Android - как заменить часть строки другой строкой?
  • Оберните строку после нескольких слов по-разному в Java
  • Строковый постоянный пул
  • Как обновить TextView от другого classа
  • Речь в текст на Android
  • Jar Mismatch Нашел 2 версии android-support-v4.jar в списке зависимостей
  • Давайте будем гением компьютера.