Foros del Web » Programación para mayores de 30 ;) » Java »

Sobre método "private static"

Estas en el tema de Sobre método "private static" en el foro de Java en Foros del Web. ¡Buenas tardes! Mi duda es la siguiente: Yo tengo entendido que al definir una variable como static , cada instancia de la clase "compartirá" el ...
  #1 (permalink)  
Antiguo 31/03/2011, 15:44
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Pregunta Sobre método "private static"

¡Buenas tardes! Mi duda es la siguiente:
  • Yo tengo entendido que al definir una variable como static, cada instancia de la clase "compartirá" el mismo valor de esa variable. Además, se puede acceder a esa variable desde otra clase sin necesidad de instanciar un objeto.
  • Además, tengo entendido que un método se define static para que sea fácilmente accesible desde otra clase sin necesidad de una instancia, haciendo NombredeClase.metodo().
Pero cuando ese método static se define además como private, entonces ya no se podría acceder a éste sino sólo desde su misma clase.
Mi pregunta puede resultar tonta... ¿Por qué se define un método como private static? ¿Tiene alguna utilidad especial? Quizás los métodos static proporcionan una propiedad adicional a la de ser fácilmente accesible desde otra clase sin instancia alguna.
  #2 (permalink)  
Antiguo 31/03/2011, 16:06
 
Fecha de Ingreso: noviembre-2008
Mensajes: 59
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Sobre método "private static"

Básicamente es un método privado para la clase pero que no necesita tener una instancia de esa clase en memoria. En realidad hasta donde tengo entendido es una tontería, aunque imagino que puede tener usos reales, ya que el método al ser estático solo generará una instancia en memoria. Se me ocurre un ejemplo con la clase Reloj:

Código:
public class Reloj{

private int hora;
private int minutos;
private int segundos;

public Reloj(int timeZone){
long milisegundos = Reloj.timeMillis();
/*Obtiene la hora para el timeZone que nos interese*/
}
private static long timeMillis(){
return getTimeInMillis();
}

public int getHora(){
return this.hora;
}
//////
}
Con esta clase podemos crear un reloj que nos devuelva la hora del momento para el time-zone que nos interese. Internamente para conseguir la hora realiza una llamada a la funcion timeMillis, este podría ser un método normal, pero estaríamos creando una instancia nueva para cada reloj. De esta manera, será una única instancia para todas de Reloj. Es un uso que se me ocurre, pero digamos que no he usado esta metodología en la vida en 7 años que llevo programando.
  #3 (permalink)  
Antiguo 31/03/2011, 21:03
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Sobre método "private static"

Cita:
Iniciado por napartar Ver Mensaje
Básicamente es un método privado para la clase pero que no necesita tener una instancia de esa clase en memoria. En realidad hasta donde tengo entendido es una tontería, aunque imagino que puede tener usos reales, ya que el método al ser estático solo generará una instancia en memoria. Se me ocurre un ejemplo con la clase Reloj:

Código:
public class Reloj{

private int hora;
private int minutos;
private int segundos;

public Reloj(int timeZone){
long milisegundos = Reloj.timeMillis();
/*Obtiene la hora para el timeZone que nos interese*/
}
private static long timeMillis(){
return getTimeInMillis();
}

public int getHora(){
return this.hora;
}
//////
}
Con esta clase podemos crear un reloj que nos devuelva la hora del momento para el time-zone que nos interese. Internamente para conseguir la hora realiza una llamada a la funcion timeMillis, este podría ser un método normal, pero estaríamos creando una instancia nueva para cada reloj. De esta manera, será una única instancia para todas de Reloj. Es un uso que se me ocurre, pero digamos que no he usado esta metodología en la vida en 7 años que llevo programando.
Interesante su ejemplo... ya me va quedando un poco más claro... muchas gracias, caballero.
Alguien más que dese opinar, estaré muy agaradecido.
  #4 (permalink)  
Antiguo 01/04/2011, 01:07
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Sobre método "private static"

Cita:
En realidad hasta donde tengo entendido es una tontería, aunque imagino que puede tener usos reales
Hombre, de tontería nada, tiene muchas utilidades.

Una básica, supón que quieres tener un campo de identificador numérico para cada uno de los objetos que se crean de una clase. El mejor sitio para llevar el contador es un static.

Ten en cuenta que una variable static será compartida por todos los objetos de esa clase, así que imagínate si es útil.

Edit: Entiendo que te estabas refiriendo al private static, así que lo que he escrito no descubre nada nuevo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 01/04/2011, 14:03
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Sobre método "private static"

Gracias de todas maneras por las aclaraciones... ;)
  #6 (permalink)  
Antiguo 01/04/2011, 22:01
 
Fecha de Ingreso: abril-2011
Mensajes: 14
Antigüedad: 13 años
Puntos: 0
Respuesta: Sobre método "private static"

Claro que usualmente, para acceder a una variable estática desde la misma clase, no vale la pena tener un getter, sino simplemente utilizarla...

Sin embargo, he visto muchas construcciones que más bien tienen esta cara:

Código:
public class Foo{

    private static final String miConstante = crearConstante();

    private static String crearConstante(){
    ...
    (Codigo para crear la constante)
    ....
    }

}
Tal vez el caso no sea muy común (las constantes suelen ser valores más bien simples) , pero es útil al momento de crear constantes cuyo valor sea complejo de crear. Por ejemplo, cuando provenga de un archivo externo, pero que se espere que nunca cambie durante la ejecución (de ahí el indicador "final").

Saludos.

Etiquetas: metodos, private, static
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:16.