La sintaxis de Java se deriva en gran medida de
C++. Pero a diferencia de éste, que combina la sintaxis para programación genérica, estructurada y orientada a objetos, Java fue construido desde el principio para ser completamente orientado a objetos. Todo en Java es un objeto (salvo algunas excepciones), y todo en Java reside en alguna clase (recordemos que una clase es un molde a partir del cual pueden crearse varios objetos).
Hola mundo
Aplicaciones autónomas
// Hola.java
public class Hola
{
public static void main(String[] args)
{
System.out.println("Hola, mundo!");
}
}
Este ejemplo necesita una pequeña explicación.
- Todo en Java está dentro de una clase, incluyendo programas autónomos.
- El código fuente se guarda en archivos con el mismo nombre que la clase que contienen y con extensión “.java”. Una clase (
class
) declarada pública (public
) debe seguir este convenio. En el ejemplo anterior, la clase es Hola
, por lo que el código fuente debe guardarse en el fichero “Hola.java”
- El compilador genera un archivo de clase (con extensión “.class”) por cada una de las clases definidas en el archivo fuente. Una clase anónima se trata como si su nombre fuera la concatenación del nombre de la clase que la encierra, el símbolo “$”, y un número entero.
- Los programas que se ejecutan de forma independiente y autónoma, deben contener el método
”main()”
.
- La palabra reservada
”void”
indica que el método main no devuelve nada.
- El método main debe aceptar un array de objetos tipo String. Por acuerdo se referencia como
”args”
, aunque puede emplearse cualquier otro identificador.
- La palabra reservada
”static”
indica que el método es un método de clase, asociado a la clase en vez de una instancias de la misma. El método main debe ser estático o ’’de clase’’.
- La palabra reservada
public
significa que un método puede ser llamado desde otras clases, o que la clase puede ser usada por clases fuera de la jerarquía de la propia clase. Otros tipos de acceso son ”private”
o ”protected”
.
- La utilidad de impresión (en pantalla por ejemplo) forma parte de la biblioteca estándar de Java: la clase ‘’’System’’’ define un campo público estático llamado ‘’’out’’’. El objeto
out
es una instancia de ‘’’PrintStream’’’, que ofrece el método ‘’’println (String)’’’ para volcar datos en la pantalla (la salida estándar).
- Las aplicaciones autónomas se ejecutan dando al entorno de ejecución de Java el nombre de la clase cuyo método main debe invocarse. Por ejemplo, una línea de comando (en Unix o Windows) de la forma
java –cp . Hola
ejecutará el programa del ejemplo (previamente compilado y generado “Hola.class”) . El nombre de la clase cuyo método main se llama puede especificarse también en el fichero “MANIFEST” del archivo de empaquetamiento de Java (.jar).
Applets
Las applet Java son programas incrustados en otras aplicaciones, normalmente una página Web que se muestra en un navegador.
gc.drawString("Hola, mundo!", 65, 95);
<!-- Hola.html -->
<html>
<head>
<title>Applet Hola Mundo</title>
</head>
<body>
<applet code="Hola.class" width="200" height="200">
</applet>
</body>
</html>
Actualmente HTML 5 ha eliminado el uso de la etiqueta <applet>.
La sentencia
import
indica al compilador de Java que incluya las clases
java.applet. Applet y
java.awt. Graphics, para poder referenciarlas por sus nombres, sin tener que anteponer la ruta completa cada vez que se quieran usar en el código fuente.
La clase
Hola
extiende (
extends
) a la clase
Applet
, es decir, es una subclase de ésta. La clase
Applet
permite a la aplicación mostrar y controlar el estado del applet. La clase
Applet
es un componente del AWT (Abstract Window Toolkit), que permite al applet mostrar una interfaz gráfica de usuario o GUI (Graphical User Interface), y responder a eventos generados por el usuario.
La clase
Hola
sobrecarga el método
paint (Graphics) heredado de la superclase contenedora (
Applet
en este caso), para acceder al código encargado de dibujar. El método
paint()
recibe un objeto
Graphics
que contiene el contexto gráfico para dibujar el applet. El método
paint()
llama al método drawString (String, int, int) del objeto.
Servlets
Los servlets son componentes de la parte del servidor de Java EE, encargados de generar respuestas a las peticiones recibidas de los clientes.
// Hola.java
import java.io.IOException;
import javax.servlet.*;
public class Hola extends GenericServlet
{
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("Hola, mundo!");
pw.close();
}
}
Las sentencias
import
indican al compilador de Java la inclusión de todas las clases públicas e interfaces de los paquetes
java.io y
javax.servlet en la compilación.
La clase
Hola
extiende (
extends
), es heredera de la clase
GenericServlet. Esta clase proporciona la interfaz para que el servidor le pase las peticiones al servlet y el mecanismo para controlar el ciclo de vida del servlet.
La clase
Hola
sobrecarga el método
service (ServletRequest, ServletResponse), definido por la interfaz
servlet para acceder al manejador de la petición de servicio. El método
service()
recibe un objeto de tipo
ServletRequest que contiene la petición del cliente y un objeto de tipo
ServletResponse, usado para generar la respuesta que se devuelve al cliente. El método
service()
puede
lanzar (
throws
) excepciones de tipo ServletException e IOException si ocurre algún tipo de anomalía.
El método
setContentType (String) en el objeto respuesta establece el tipo de contenido MIME a "text/html", para indicar al cliente que la respuesta a su petición es una página con formato HTML. El método
getWriter() del objeto respuesta devuelve un objeto de tipo
PrintWriter, usado como una
tubería por la que viajarán los datos al cliente. El método
println (String) escribe la cadena "Hola, mundo!" en la respuesta y finalmente se llama al método
close() para cerrar la conexión, que hace que los datos escritos en la
tubería o stream sean devueltos al cliente.
Aplicaciones con ventanas
Swing es la biblioteca para la interfaz gráfica de usuario avanzada de la plataforma Java SE.
// Hola.java
import javax.swing.*;
public class Hola extends JFrame {
Hola() {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
add(new JLabel("Hola, mundo!"));
pack();
}
public static void main(String[] args) {
new Hola().setVisible(true);
}
}
Las instrucciones
import
indican al compilador de Java que las clases e interfaces del paquete
javax.swing se incluyan en la compilación.
La clase
Hola
extiende (
extends
) la clase
javax.swing.JFrame, que implementa una ventana con una barra de título y un control para cerrarla.
El constructor
Hola()
inicializa el marco o frame llamando al método
setDefaultCloseOperation (int) heredado de JFrame para establecer las operaciones por defecto cuando el control de cierre en la barra de título es seleccionado al valor WindowConstants.DISPOSE_ON_CLOSE. Esto hace que se liberen los recursos tomados por la ventana cuando es cerrada, y no simplemente ocultada, lo que permite a la máquina virtual y al programa acabar su ejecución. A continuación se crea un objeto de tipo JLabel con el texto "Hola, mundo!", y se añade al marco mediante el método
add (Component), heredado de la clase
Container. El método
pack(), heredado de la clase
Window, es invocado para dimensionar la ventana y distribuir su contenido.
El método
main()
es llamado por la JVM al comienzo del programa. Crea una instancia de la clase
Hola
y hace la ventana sea mostrada invocando al método
setVisible (boolean) de la superclase (clase de la que hereda) con el parámetro a true. Véase que, una vez el marco es dibujado, el programa no termina cuando se sale del método
main()
, ya que el código del que depende se encuentra en un hilo de ejecución independiente ya lanzado, y que permanecerá activo hasta que todas las ventanas hayan sido destruidas.