Variables globales en Java

¿Cómo se definen las variables globales en Java?

Para definir Variable global, puede utilizar palabras clave estáticas

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

ahora puedes acceder ayb desde cualquier lugar llamando

 Example.a; Example.b; 

Tu no Eso es por diseño. No deberías hacerlo aunque pudieras.

Dicho esto, podría crear un conjunto de miembros estáticos públicos en una clase llamada Globals.

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

pero no deberías 🙂 En serio … no lo hagas.

Otra forma es crear una interfaz como esta:

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

Cualquier clase que necesite usarlos solo tiene que implementar la interfaz:

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

Es mejor usar dependency injection:

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

Verdaderamente hablando, no hay un concepto de “GLOBAL” en un progtwig de Java OO

Sin embargo, hay algo de verdad detrás de su pregunta porque habrá algunos casos en los que desee ejecutar un método en cualquier parte del progtwig. Por ejemplo, el método de random () en la aplicación Phrase-O-Matic; es un método que se puede llamar desde cualquier lugar de un progtwig.

Entonces, para satisfacer las cosas como arriba, “necesitamos tener variables y métodos similares a Global”

PARA DECLARAR UNA VARIABLE COMO GLOBAL.

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

PARA DECLARAR UN MÉTODO TAN GLOBAL .

  1. Mark the method as public static While declaring. 

Como declare las variables globales y el método como estáticos, puede llamarlos a cualquier lugar que desee simplemente con la ayuda del siguiente código

ClassName.X

NOTA : X puede ser el nombre del método o el nombre de la variable según el requisito y ClassName es el nombre de la clase en la que los declaró.

Nada debe ser global, excepto las constantes.

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

Pon esto dentro de tu clase principal. En otros archivos .java, utilízalo a través de:

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

Asegúrese de que cuando saque el código del piso de la sala de corte y lo libere, elimine o comente esta funcionalidad.

Si tienes un método de caballo de batalla, como un aleatorizador, ¡te sugiero crear un paquete de “Caja de herramientas”! Todos los codificadores deberían tener uno, luego, cuando quieras usarlo en .java, ¡simplemente importa!

Muchas buenas respuestas, pero quiero dar este ejemplo, ya que se considera la forma más adecuada de acceder a las variables de una clase por otra clase: utilizando getters y setters.

La razón por la que utiliza getters y setters de esta manera en lugar de solo hacer que la variable sea pública es la siguiente. Digamos que su var va a ser un parámetro global que NUNCA quiere que alguien cambie durante la ejecución de su progtwig (en el caso cuando está desarrollando código con un equipo), algo así como la URL de un sitio web. En teoría, esto podría cambiar y se puede usar muchas veces en su progtwig, por lo que desea utilizar una var global para poder actualizarlo todo a la vez. Pero no quieres que alguien más entre y cambie esta var (posiblemente sin darse cuenta de lo importante que es). En ese caso, simplemente no incluye un método setter, y solo incluye el método 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; } } 

Uno, no hay una variable global en Java

Dos, lo que sí tenemos es una palabra clave ‘estática’ y eso es todo lo que necesitamos. Nada existe fuera de clase en Java. La palabra clave static representa una variable de clase que, al contrario que la variable de instancia, solo tiene una copia y trasciende todas las instancias de esa clase creada, lo que significa que su valor puede modificarse y accederse a todas las instancias en cualquier punto. Si necesita una variable global a la que se pueda acceder más allá de los ámbitos, esta es la variable que necesita, pero su scope solo existe donde está la clase, y eso será todo.

No existe tal cosa como una variable verdaderamente global en Java. Cada variable estática debe pertenecer a alguna clase (como System.out), pero cuando haya decidido qué clase entrará, puede consultarla desde cualquier lugar cargada por el mismo cargador de clases.

Tenga en cuenta que las variables estáticas siempre deben estar protegidas durante la actualización para evitar condiciones de carrera.

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

De esta forma puedes acceder a ellos con GlobalClass.x y GlobalClass.s

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

puedes llamar a donde quieras:

 GlobalImpl.global // 5 

Como probablemente suponga por la respuesta, no hay variables globales en Java y lo único que puede hacer es crear una clase con miembros estáticos:

 public class Global { public static int a; } 

Puedes usarlo con Global.a otro lugar. Sin embargo, si usa Java 1.5 o superior, puede utilizar la import static magia import static para que se vea aún más como una variable global real:

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

Y voilà !

Ahora bien, esto está lejos de ser una buena práctica, como pueden ver en los comerciales: no hagas esto en casa

No hay variables globales en Java, pero hay clases globales con campos públicos. Puede usar la función de importación estática de java 5 para que se vea casi como variables globales.

Generalmente la variable Global (supongo que la comparas con C, Cpp) define como public static final

me gusta

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

Los ENUM también son útiles en dicho escenario:

Por ejemplo Calendar.JANUARY )

En general, la progtwigción de Java no tiene ninguna variable global. Desde el punto de vista de las variables locales, todas están comprendidas en el ámbito de cualquier clase definida en el progtwig. Podemos tener la variable estática para tener el scope de las variables globales.

Creando un archivo independiente, ej. Ejemplo.java para usar la primera solución, está bien. Puede hacerlo también dentro de la aplicación, si, por ejemplo, las variables globales son especiales para su aplicación actual, etc.

Crea una clase al principio y declara tus variables allí:

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

A continuación, puede acceder a estas variables, usándolas como ‘Globals.month_number’, etc., desde cualquier lugar de su aplicación.

De acuerdo con el concepto, las variables globales, también conocidas como variables de instancia son las variables de nivel de clase, es decir, se definen dentro de una clase pero fuera de los métodos. Para que estén disponibles completamente y usarlos directamente, proporcione la palabra clave estática. Entonces, si estoy escribiendo un progtwig para una operación aritmética simple y requiere un par de números, entonces dos variables de instancia se definen como tales:

 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 

Además, el uso de la palabra clave estática antes de las variables de instancia nos permite no especificar tipos de datos para las mismas variables una y otra vez. Simplemente escribe la variable directamente.

 // 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 

Para definir Variable global, puede utilizar palabras clave estáticas

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

ahora puedes acceder ayb desde cualquier lugar llamando

 Tools.a; Tools.b; 

Tienes razón … especialmente en J2ME … Puedes evitar NullPointerException poniendo dentro de tu constructor MidLet (inicialización de progtwigción) esta línea de código:

 new Tools(); 

Esto asegura que las Herramientas serán asignadas antes de cualquier instrucción que las use.

¡Eso es!