No he utilizado muchos métodos estáticos anteriormente, pero recientemente tiendo a usar más de ellos. Por ejemplo, si quiero establecer un indicador booleano en una clase, o acceder a uno sin la necesidad de pasar el objeto real a través de las clases.Pros y contras de los métodos estáticos de Java
Por ejemplo:
public class MainLoop
{
private static volatile boolean finished = false;
public void run()
{
while (!finished)
{
// Do stuff
}
}
// Can be used to shut the application down from other classes, without having the actual object
public static void endApplication()
{
MainLoop.finished = true;
}
}
¿Es esto algo que debe evitar? ¿Es mejor pasar un objeto para poder usar los métodos de los objetos? ¿El booleano finished
cuenta ahora como global, o es igual de seguro?
La variable 'finished' es de hecho" global "para la clase. Java no tiene verdaderas variables "globales" (para todo). –
@Hasslarn: su código está roto (y estoy un poco sorprendido de que después de cuatro respuestas nadie lo mencionó): no hay absolutamente ninguna garantía de que cuando otro hilo llame a * endApplication() * el valor se leerá como * true * por el hilo que ejecuta el método * run() *. ** Debes ** utilizar algún mecanismo de sincronización aquí, como por ejemplo declarando * terminado * como * volátil *. – TacticalCoder
@Hasslarn: Edité su pregunta y corrigí su código (no es que usar estática de esta manera esté limpio ni nada) agregando * volátil * a su bandera booleana. – TacticalCoder