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.

HowTo: Cambiar el Idioma de Mac Os X

A algún conocido, al llevar su mac a reparar, le han tenido que reinstalar el sistema y al recogerlo se lo ha encontrado en inglés. Que es el idioma por defecto de la instalación.

Menú de Mac OS X en inglés

Siempre se puede llevar otra vez al servicio técnico para que nos lo vuelvan a volver a poner en Español, o si os da pereza, voy a explicar cómo podéis ponerlo en Español siguiendo unos sencillos pasos.

Abrir Preferencias de Idioma

Lo primero va a ser abrir las preferencias del Lenguaje e Idioma. Podemos acceder a las Preferencias del Sistema desde la barra de menú, arriba, pulsando en la manzana. Se despliega un menú en el que elegimos "System Preferences …".

Abrir Preferencias del Sistema

Una vez abiertas las Preferencias del Sistema, pulsamos "Language & Text".

Idioma y texto en Preferencias del Sistema

Elegir el idioma preferido

En la primera pantalla de las preferencias de idioma, tenemos un listado con los idiomas del sistema.

Lenguaje e Idioma

Ordenamos los idiomas poniendo arriba aquellos que queremos que se utilicen. Un programa leerá el primer idioma de la lista, por ejemplo “Español”. Si el programa está traducido al Español, saldrá en Español, si no, leerá el segundo. Si el segundo es “Inglés” y la aplicación está traducida al Inglés, pues saldrá en Inglés, y si no, pues leerá el tercero, y si no, el cuarto …

¿Y cómo ordenamos la lista de idiomas para poner el Español primero? Busca el español en la lista, púlsalo y arrástralo hacia arriba.

Ordenar Idiomas

Para que el sistema salga en español, el Español debe ser el primero de la lista.

Español debe quedar por encima del Inglés

Si el español no aparece en la lista, pulsa en "Editar Lista", debajo de la lista. Busca el idioma Español y márcalo. También puedes desmarcar aquellos idiomas que no utilices, pero deja por lo menos el Inglés.

Reiniciar

Los cambios tendrán efecto la próxima vez que se abran las aplicaciones. La manera más sencilla de reiniciarlas es reiniciar el equipo entero.

Si no podemos, o no queremos en este momento, apagar el sistema, podemos cerrar una a una todas las aplicaciones. La única que no podemos cerrar es el Finder, ya que está siempre abierto. Si este es tu caso, sigue los siguientes pasos.

Pulsa la manzana en la barra superior y en el menú que se despliega selecciona "Force Quit …":

Abrir Forzar el cierre

Se muestra una ventana con el listado de las aplicaciones abiertas. Selecciona Finder y pulsa Relaunch.

Reiniciar Finder

Una vez que hayamos reiniciado, las aplicaciones aparecerán en Español:

Menú de Mac OS X en español

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í.