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

Codigo con Inicialización static explicita

Estas en el tema de Codigo con Inicialización static explicita en el foro de Java en Foros del Web. Hola estimados. Estoy aprendiendo Java y hay una parte en un código que no logro entender. Código: package Ejercicio; public class ExplicitStatic { public static ...
  #1 (permalink)  
Antiguo 14/03/2015, 11:35
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Codigo con Inicialización static explicita

Hola estimados.
Estoy aprendiendo Java y hay una parte en un código que no logro entender.

Código:
package Ejercicio;

public class ExplicitStatic {
	public static void main(String[] args){
		System.out.println("Inside main()");
		Cups.cup1.f(99);
	}

}
Código:
package Ejercicio;

public class Cups {
	static Cup cup1;
	static Cup cup2;
	static {
		cup1 = new Cup(1);
		cup2 = new Cup(2);
		
	}
	
	Cups(){
		System.out.println("Cups()");
	}
	

}
Código:
package Ejercicio;

public class Cup {
	Cup(int marker){
		System.out.println("Cup("+ marker +")");
	}
	
	void f(int marker){
		System.out.println("f("+ marker + ")");
	}

}
Cuando ejecuto esto me muestra de formato de salida:

Cita:
Inside main()
Cup(1)
Cup(2)
f(99)

Bien lo que entiendo es que cuando el compilador ejecuta la siguiente linea (Cups.cup1.f(99);) en main lo que hace es entrar a la clase Cups y en primer orden ejecuta los inicializadores static declarados en la clase Cups creando los objetos cup1 y cup2 y finalmente invoca al metodo f(99) del objeto cup1.

Mi pregunta es la siguiente:
¿Porque no se ejecuta el constructor de la clase Cups (el que marque con negritas)? (según lei en un tutorial, los constructores se ejecutan en forma automática pero acá no se ejecuta). Disculpen si la pregunta llegase a ser absurda, pero en verdad nose bien que pasa allí, soy nuevo y me anima aprender bien este lenguaje jejeje. Muchas gracias al que me ayude :D.

Última edición por JackSantana; 14/03/2015 a las 11:46
  #2 (permalink)  
Antiguo 14/03/2015, 13:00
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 74
Antigüedad: 9 años, 6 meses
Puntos: 1
Respuesta: Codigo con Inicialización static explicita

Hola,
Tu duda no es para nada absurda. A vista de pájaro, sucede que no se ejecuta porque no se llega a instanciar ningún objeto de la clase Cups (no se hace new Cups()). Se está accediendo directamente al miembro estático cup1.

Saludos.
  #3 (permalink)  
Antiguo 15/03/2015, 04:08
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Codigo con Inicialización static explicita

Buenas,

Las variables static son inicializadas por el classLoader en un momento inteterminado (la especificación de la máquina virtual no define exactamente cuando debe hacerse) pero siempre antes de que se cree instancia alguna de la clase o se haga cualquier acceso a ésta.

En el caso de tu implementación de JVM (supongo que será la de Oracle-Windows) el classloader inicializa las variables cuando detecta el primer acceso a la clase (Cups.) .

Como bien te dice eduar2083 el constructor se ejecuta solo cuando se crea una instancia de la clase. Puedes perfectamente utilizar una clase con métodos y variables estáticos sin que el constructor de ésta se ejecute nunca.

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: clase, 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 17:05.