19 ответов:
для определения глобальной переменной можно использовать статическое Ключевое слово
public class Example { public static int a; public static int b; }теперь вы можете получить доступ к a и b из любого места позвонив
Example.a; Example.b;
нет. Это дизайн. Вы не должны этого делать, даже если бы могли.
при этом вы можете создать набор общедоступных статических членов в классе с именем Globals.
public class Globals { public static int globalInt = 0; /// }но вы действительно не должны :). Серьезно.. не делай этого.
другой способ-создать такой интерфейс:
public interface GlobalConstants { String name = "Chilly Billy"; String address = "10 Chicken head Lane"; }любой класс, который должен использовать их только реализовать интерфейс:
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
тем не менее, есть некоторая правда за вашим вопросом, потому что будут некоторые случаи, когда вы хотите запустить метод в любой части программы. Например - - - random() метод в приложении Phrase-O-Matic; это метод должен быть вызываем из любого места программы.
Итак, чтобы удовлетворить такие вещи, как выше "нам нужно иметь глобальные переменные и методы"
ОБЪЯВИТЬ ПЕРЕМЕННУЮ КАК ГЛОБАЛЬНУЮ.
1.Mark the variable as public static final While declaring.ОБЪЯВИТЬ МЕТОД КАК ГЛОБАЛЬНЫЙ.
1. Mark the method as public static While declaring.потому что я объявил глобальные переменные и метод как статические вы можете вызвать их в любом месте вы хотите просто с помощью следующего кода
имя класса.X
Примечание: X может быть либо именем метода, либо именем переменной в соответствии с требованием, а ClassName-это имя класса, в котором вы объявили их.
ничего не должно быть глобальным, кроме констант.
public class MyMainClass { public final static boolean DEBUGMODE=true; }поместите это в свой основной класс. В других. java-файлы, используйте его через:
if(MyMainClass.DEBUGMODE) System.out.println("Some debugging info");убедитесь, что при перемещении кода с пола режущей комнаты и в релизе вы удаляете или комментируете эту функцию.
Если у вас есть метод рабочей лошадки, как рандомизатор, я предлагаю создать пакет "Toolbox"! Все кодеры должны иметь один, то всякий раз, когда вы хотите использовать его в a .Ява, просто импортируйте его!
много хороших ответов, но я хочу привести этот пример, поскольку он считается более правильным способом доступа к переменным класса другим классом: с помощью геттеров и сеттеров.
причина, почему вы используете геттеры и сеттеры таким образом, вместо того, чтобы просто сделать переменную общественного следующим образом. Допустим, ваш 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 нет глобальной переменной
во-вторых, у нас есть ключевое слово "static", и это все, что нам нужно. Ничто не существует вне класса в Java. Ключевое слово static представляет переменную класса, которая, в отличие от переменной экземпляра, имеет только одну копию и превосходит все экземпляры этого созданного класса, что означает, что его значение может быть изменено и доступно во всех экземплярах в любой момент. Если вам нужна глобальная переменная, к которой можно получить доступ за пределами областей, то это переменная, которая вам нужна, но ее область существует только там, где класс, и это будет все.
в Java нет такой вещи, как действительно глобальная переменная. Каждая статическая переменная должна принадлежать некоторому классу (например, System.out), но когда вы решили, в какой класс он войдет, вы можете ссылаться на него отовсюду, загруженный одним и тем же загрузчиком классов.
обратите внимание, что статические переменные всегда должны быть защищены При обновлении, чтобы избежать состояния гонки.
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 нет глобальных переменных, и единственное, что вы можете сделать, это создать класс со статическими членами:
public class Global { public static int a; }вы можете использовать его с
Global.aв другом месте. Однако если вы используете Java 1.5 или лучше, вы можете использоватьimport staticмагия, чтобы сделать его еще более похожим на реальную глобальную переменную:import static test.Global.*; public class UseGlobal { public void foo() { int i = a; } }и вуаля!
сейчас это далеко не лучшая практика, так как вы можете видеть в роликах: не делайте этого дома
в Java нет глобальных переменных, но есть глобальные классы с открытыми полями. Вы можете использовать функцию статического импорта java 5, чтобы она выглядела почти как глобальные переменные.
вообще глобальная переменная (я предполагаю,что вы сравниваете ее с C, Cpp) определить как
public static finalкак
class GlobalConstant{ public static final String CODE = "cd"; }перечисления также полезны в таком сценарии:
Calendar.JANUARY)
В общем, JAVA-Программирование не имеет глобальных переменных .Поскольку кроме локальных переменных все они входят в область действия любого класса, определенного в программе. Мы можем иметь статическую переменную, чтобы иметь область глобальных переменных.
создание независимого файла, например. Образец.java, чтобы использовать 1-е решение, просто отлично. Вы можете сделать это также в приложении, если, например, глобальные переменные являются специальными для вашего текущего приложения и т. д.:
создайте класс В начале и объявите там свои переменные:
class Globals { static int month_number; static String month_name; }затем вы можете получить доступ к этим переменным, используя их как глобальные.month_number и т. д. -- от averywhere в вашем приложении.
судя по концепции, глобальные переменные также известные как переменные экземпляра, переменные класса,т. е. они определены внутри класса, но вне методов. Чтобы сделать их полностью доступными и использовать их непосредственно, укажите ключевое слово 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;вы правы...особенно в J2ME... Вы можете избежать NullPointerException, поместив внутри вашего конструктора мидлета (инициализация proggy) эта строка кода:
new Tools();это гарантирует, что инструменты будут выделены перед любой инструкцией это использует его.
вот именно!
Comments