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



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

757   19  

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

    Ничего не найдено.