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

La lengua popular

La lengua popular

Y en su decimonoveno disco de estudio, Andrés Calamaro cambió los nomeolvides y las tentaciones aztecas por el color y la luz de la lengua popular. Y sin darme cuenta, este artista que se reinventa un par de veces por década había alegrado mis oscuros viajes en autobús.

Por ello se merece, a parte de comprar el disco, que le haga este pequeño homenaje.

El secreto de hacer felices a los demás pasa por transmitir felicidad. Es una actitud difícil de mantener, que ya desde la primera canción se siente. Hablamos de “Los chicos“, homenaje en clave de rock a los amigos ausentes. Hablamos tristes, pero con paz en el cuerpo. Es como si el propio Andrés nos dijera “Hablo del pasado, mira, ya está superado. Ahora hablemos de cosas alegres”.

Y a partir de allí es una cuesta abajo de amor, mariposas y arco-iris… Sí, así de cursi :)… En el fondo, el amor es cursi. Son canciones como carnaval de Brasil, Minibar, Soy Tuyo, o La mitad del amor

Pero sin duda, me quedo con Mi Gin Tonic y La espuma de las orillas. De esta última no se qué parte elegir, mejor os pongo la letra entera.

En fin, para todo aquél que esté enamorado y disfrutando de su amor, un disco recomendado.

iTunes: La lengua popular – Andrés Calamaro

Blaapps 0.5.0 Released

After 21 months of sporadic work, I’ve finished the application for my “Thesis”. Today I’m proud to announce the release of Blaapps Application Framework version 0.5.0.

Blaaps Logo for version 0.5.0

I’ve done lots of work transforming rudder Application Server, a previous project, into an Application Framework.

Blaapps Architecture

The Kernel of Blaapps is based on core Subsystems. Two of them are the most important:

  • Deployer
  • Messaging

The Deployer reads components called Modules, and loads them into memory. Modules are like plugins, hot plug-gable extensions to the application.

Messaging brings the infrastructure for the inter-module comunication.

Other features which are usually needed for Application development are packaged as Kernel Modules. In this version, two modules are included:

  • Remote
  • Persistence

Remote helps you to publish objects into a RMI Registry.

Persistence Is a JPA (Hibernate) wrapper.

As you can see, blaapps 0.5.0 is reinventing the wheel. There’s lots of plugin frameworks, and the EJB 3.0 standards helps you with persistence and remote objects. So why develop something like blaapps?

The first reason was that I wanted to learn how to do cool stuff, like Dependency Injection. Blaapps contains “only” 1800 lines of code, so it’s easier to learn from blaapps than from a real Application Server.

The second one is that I wanted something fast for my developments. Blaapps is very limited, but it starts in few seconds.

What’s next? Once I present my Thesis and became an official engineer, I’ll start with blaapps 0.6.0. There’s already a Milestone planning which will focus on making easier the building of GUIs.

WarpTalks Febrero 2009

Warp Talks

Desde Warp Networks estamos promocionando un ciclo de charlas con nombre clave “warptalks”.

Principalmente serán charlas técnicas relacionadas con el software libre impartidas por los trabajadores de Warp.

Aunque es una iniciativa interna y todavía estamos probando, queremos compartir la experiencia con el resto del mundo a través de internet.

Este viernes, día 20 de febrero 2009, tendremos el honor de contar con Adeodato Simó, que impartirá la charla “Perder el miedo a Git en 90 minutos” a las 18:00 (hora Europe/Madrid).

Adeodato Simó es parte del Release Team de Debian, ha realizado prácticas en Google y desarrolla el proyecto Minirok:

Podrás seguir la charla en vivo en justin.tv.

Si el horario te viene mal, o te interesan las charlas anteriores, tanto vídeos como presentaciones estarán disponibles en slidehsare y vimeo:

Nuestro objetivo es realizar un día de charlas el último lunes de cada mes (aproximadamente), quizá te interese obtener noticias de última hora en twitter.

o en nuestro blog corporativo: