Ответ 1
Если вы действительно хотите это сделать, сделайте его общедоступной статической переменной.
Однако вам следует попытаться не делать этого - он делает менее элегантным, сложнее поддерживать, сложнее проверить код.
Почему в java нет глобальных переменных? Если мне нравится использовать любую переменную во всех классах программы, то как я могу это сделать?
Если вы действительно хотите это сделать, сделайте его общедоступной статической переменной.
Однако вам следует попытаться не делать этого - он делает менее элегантным, сложнее поддерживать, сложнее проверить код.
Глобальные переменные (в контексте Java - public static
) являются плохими, потому что:
сложнее поддерживать - вы не можете поставить точку останова или записать каждое изменение в переменную, поэтому неожиданным значениям во время выполнения будет очень сложно отслеживать и исправлять
сложнее протестировать - прочитайте Сообщение Miško Havery
сложнее читать - когда кто-то видит код, он задается вопросом:
Сделать одно пояснение, которое кажется необходимым - переменные!= константы. Переменные меняются, и эта проблема. Таким образом, наличие public static final int DAYS_IN_WEEK = 7
отлично - никто не может его изменить.
Некоторые допустимые глобальные "переменные" - это константы;-) например: Math.PI
С++ - это мультипарадигма, тогда как Java чистый "почти исключительно"
ориентированный объект. Ориентация объекта означает, что каждая часть данных должна находиться внутри объекта.
Подробнее см. ссылки.
Почему глобалы злы, объяснил здесь.
Если вам нужен определенный ресурс, доступ к которому осуществляется из любой части вашей программы, просмотрите шаблон дизайна Singleton.
Я просто хотел добавить, что если вы хотите использовать постоянную глобальную переменную в безопасности. Чтобы использовать его, используйте ключевое слово final. Пример:
public static final int variable;
Глобальные переменные не хорошо подходят для ООП. Тем не менее, в качестве глобальных переменных могут быть константы. В некотором смысле singleton
являются глобальными переменными. Если вы хотите иметь константы в качестве глобальных переменных, лучше использовать enums
вместо.
EDIT:
Константы, которые использовались для вызова Class.Constant
, теперь могут использоваться Constant
с помощью static import
. Это приближается как можно ближе к глобальным переменным в С++.
package foo;
public class Globals {
public static int count = 3;
}
Затем вы можете получить к нему доступ в любом месте, как
int uses_global = foo.Globals.count + 1;
Java предназначен для создания полностью переносимых, полностью повторно используемых объектов.
По определению, что-то, что зависит от "глобальной переменной", не полностью переносимо или полностью повторно используется. Это зависит от этой глобальной переменной, существующей в новой (повторно используемой) системе, и зависит от кода в новой (повторно используемой) системе, управляющей этой глобальной переменной. В этот момент вам лучше помещать эту глобальную переменную в собственный объект.
Вы можете использовать статический класс с синхронизированными полями и установками getters. прямые изменения в публичном статическом поле - плохая практика. по крайней мере, вы можете использовать методы get set для проверки доступа к полям.
Изменить: Если вы делаете хоть что-то пополам, я могу понять, почему.