Acertijo Java (Solución)

A principios de mes proponía un Acertijo Java.

¿Qué sale por pantalla al ejecutar la clase FooBar?

import static java.lang.System.*;
public class FooBar {
  public FooBar() {
    out.print(" Instance ");
  }
  static {
    out.print(" Static ");
  }
  public static void main (String args) {
    out.print(" Main ");
    new FooBar();
  }
}

Simplificando, lo que ocurre es lo siguiente:

  1. Se carga la clase FooBar en memoria
  2. Se ejecutan los bloques estáticos: static{}
  3. out.print(» Static «); está en un bloque estático
  4. Una vez cargada la clase, ya se pueden ejecutar métodos estáticos como main
  5. out.print(» Main «); está dentro del método main
  6. Se crea una instancia de la clase FooBar en el método main
  7. Para ello se ejecuta el constructor
  8. out.print(» Instance «); está en el constructor

Siguiendo este razonamiento, la opción correcta sería la c: «Static Main Instance».

La opción c parece correcta, pero no se llega a ejecutar el método main. Recordemos la firma que tiene que tener el método main para ser la entrada de un programa java:

  public static void main (String[] args) {}

Ha de ser esa o equivalente. ¿Ves la diferencia? El parámetro args tiene que ser un array [] de String, ya que representa los argumentos introducidos por línea de comandos. En la clase FooBar el parámetro args es simplemente un String.

Por ello, el código no se ejcutará. Java mostrará un error indicando que en la clase FooBar no existe un método main. Es por ello que la opción correcta era la f: No se ejecutará

En el día a día, un programador no sólo tiene que saber traducir ideas a código. En algunas ocasiones el código no se comporta como queremos y es cuando hay que buscar el detalle.

La agilidad con la que uno detecta pequeños detalles marca la diferencia. Algunos factores que afectan a esta agilidad son, la paciencia, saber escribir código claro, y sobre todo el conocimiento de las herramientas con las que uno trabaja.

Igual que hice en el otro post, animo a cualquiera a ponerse a prueba estudiando la certificación de Programador Java o acudir a uno de los cursos oficiales que imparto, es toda una experiencia.

Acertijo Java

Volvemos después de la resaca de año nuevo con un acertijo java.

Suponiendo que el contenido del archivo FooBar.java es el siguiente… ¿Qué saldrá por pantalla al ejecutar la clase FooBar?


import static java.lang.System.*;
public class FooBar {
  public FooBar() {
    out.print(" Instance ");
  }
  static {
    out.print(" Static ");
  }
  public static void main (String args) {
    out.print(" Main ");
    new FooBar();
  }
}
  • Main Static Instance
  • Instance Static Main
  • Static Main Instance
  • Main Instance
  • No compilará
  • No se ejecutará

Hagan sus apuestas…

Antes de empezar a preparar la certificación SCJP (Sun Certified Java Programmer) no había caído en la cuenta de cuántas cosas desconocía de programación.

Estés preparando o no la certificación de programador, recomiendo la guía de Kathy Sierra. Además, si quieres que un experto en java (modestia aparte) te asista, puedes invitarme a tomar una cerveza, o apuntarte al curso oficial que impartiré en septiembre: SL-275-SE6 Java Programming Language

¡Date prisa, al tercero que me invite a una cerveza ya no hablaré coherentemente, y el curso tiene las plazas limitadas!

Un Saludo!

Actualizado: Puedes encontrar la solución aquí.

Cómo me quedé sin teléfono (VIII)

Este verano estuve un par de semanas sin teléfono, por culpa de una portabilidad. Partes I, II, III, IV, V, VI, y VII

Mi Terminal

Por un fallo del distribuidor en mi última portabilidad, tengo un compromiso de permanencia. Esta experiencia me ha servido para darme cuenta del chollo que suponen los distribuidores para la operadora.

Si el distribuidor comete un fallo, la operadora alega que yo no he firmado el contrato con ellos, y el distribuidor alega que el operador no le ayuda con el problema. En definitiva, entre unos y otros el cliente se come los mocos.

Justo después de que este distribuidor intente darme largas, paso por el distribuidor de un amigo, donde sí tienen el terminal que yo quería con mi primera portabilidad.

Con el calentón no me lo pienso Así que inicio la portabilidad, y sin problemas, en una semana… ¡¡¡Lo tengo!!! ¡¡¡eoeooeoeoeeo!!!

Y todavía no me lo acabo de creer :).

Eso sí, me costará entrar en la lista de morosos por no pagar un compromiso de permanencia que no tengo que pagar. Y reclamaciones, juicios y lo que haga falta para volver a salir… pero… ¡¡¡Lo tengo!!!

Cómo me quedé sin teléfono (VII)

Este verano estuve un par de semanas sin teléfono, por culpa de una portabilidad. Partes I, II, III, IV, V, y VI

Estoy sin contrato ni compromiso de permanencia, huyo de mi distribuidor.

Compromiso de Permanencia

El plan es, vuelvo a mi operador anterior, con el terminal que ya tengo, y como si nada hubiera pasado. Eso sí, vuelvo sin compromiso de permanencia, que ya me canso de que me tengan agarrao.

Todo es tan bonito… hasta que la comercial se equivoca al hacer los papeles, y me pone permanencia de 18 meses.

– Oye perdona, habíamos quedado que si no me llevo terminal, no tenía compromiso de permanencia…

– ¡Ay!, Sí, perdona, vaya, ahora no me deja cambiarlo el sistema, lo cambiamos en el contrato, vuelve la semana que viene y lo cambiamos por teléfono en el sistema.

La semana siguiente estoy de vacaciones. Me paso cuando puedo, pero la chica está de vacaciones. «Vuelve la semana que viene». Tengo mudanzas por medio, estoy un poco liado, me paso un par de meses después. «Es que la chica ya no trabaja aquí, te digo donde trabaja y te pasas.»

Y hasta ahí aguanto. Yo hice el contrato con el distribuidor, no con una comercial. «Veremos a ver si podemos hacer algo desde aquí.»

Pues más les vale, porque en mi copia del contrato dice que no tengo compromiso de permanencia.

Cómo me quedé sin teléfono (VI)

Este verano estuve un par de semanas sin teléfono, por culpa de una portabilidad. Partes I, II, III, IV, y V

En una hoja de reclamaciones el distribuidor se compromete a darme el terminal solicitado en cuanto tenga existencias. ¿Será verdad?

Camino de vuelta

Desgraciadamente, para contratos de empresa, el procedimiento de reclamación se realiza vía burofax. Mi hoja de reclamaciones no sirve para nada :(.

El distribuidor se pone en contacto conmigo para indicarme que si no me llevo un teléfono antes de final de mes, darán de baja mi número de teléfono.

Después de varias quejas en todos los medios de atención al cliente del operador, y llamadas casi diarias al distribuidor (que ya empezaba a cansarse de mí), el distribuidor accede a cancelarme el contrato. Eso sí, manteniéndome el número sin compromiso de permanencia, para que pueda portar a otro operador.

Así que acudo a un distribuidor de mi viejo operador para realizar otra portabilidad, la segunda en un mes.