swaggerfox - Variables globales en Java
swagger ui java (19)
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
¿Cómo se definen las variables globales en Java?
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 programa 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.
En general, la programació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 programa. Podemos tener la variable estática para tener el alcance de las variables globales.
Es mejor usar inyección de dependencia:
public class Globals {
public int a;
public int b;
}
public class UsesGlobals {
private final Globals globals;
public UsesGlobals(Globals globals) {
this.globals = globals;
}
}
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
)
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 programa (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 programa, 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 this.var;
}
//If you do not want to change the var ever then do not include this
public static void setVar(int var){
this.var = var;
}
}
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!
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.
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.
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);
}
}
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;
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 programació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!
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.
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 alcance solo existe donde está la clase, y eso será todo.
Verdaderamente hablando, no hay un concepto de "GLOBAL" en un programa 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 programa. 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 programa.
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ó.
// 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 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