jueves, 17 de julio de 2008

Fin del capítulo 1. Créditos.

Hasta aquí ha llegado el primer capítulo del Máster OnLine de Java-J2EE-XML-AJAX que impartimos desde syncrom.com.


El curso lo editamos en formato OnLine y en formato Presencial, en Madrid.

Con cada curso se entrega también un manual, editado por nosotros y escrito por Antonio Martín y Ramón Egido, y con prólogo de Antonio Navarro, profesor titular de la Facultad de Informática en la Universidad Complutense de Madrid.




Precios:
Máster Tutorizado: 495 euros. Más información: Microsite del Máster de Java-J2EE



Los contenidos de este blog pertenecen a SYNCROM ESPAÑA SOLUTIONS, S.L.Más información en www.syncrom.com


Capítulo 1. Aspectos básicos de Java (y VI)

1.8. La sintaxis del lenguaje Java


Tras el análisis de los fundamentos de la tecnología Java y las herramientas para la construcción de programas, vamos a comenzar el estudio de la sintaxis del lenguaje.

1.8.1. Elementos del lenguaje

De momento en este capítulo vamos a conocer los elementos básicos del lenguaje Java.

1.8.1.1. Caracteres especiales y signos de puntuación

Este grupo de caracteres se utiliza de diferentes formas; por ejemplo, para indicar que un identificador es una función o una matriz; para especificar una determinada operación aritmética, lógica o de relación, etc. Son los siguientes:

, . ; : ? ‘ “ ( ) [ ] { } < !
/ \ ~ + % & ^ * - = >

1.8.1.2. Secuencias de escape

Una secuencia de escape está formada por el carácter \ seguido de una letra o de una combinación de dígitos. Son utilizadas para acciones como nueva línea, tabular y para hacer referencia a caracteres no imprimibles.

Veamos las secuencias de escape que Java tiene predefinidas:





1.8.1.3. Tipos de datos

Para poder realizar cualquier tipo de operación con los datos es obligatorio indicar siempre el tipo de los mismos. Para ello escribiremos una sentencia de la siguiente forma:

int dato;

La declaración anterior le dice al compilador de Java que dato es de tipo entero (int).

Por un lado tenemos los tipos primitivos. Son ocho, que los podemos clasificar en tipos numéricos y el tipo boolean. A su vez los tipos numéricos se clasifican en tipos enteros y en tipos reales. Los tipos enteros son byte, short, int, long y char. Los tipos reales son float y double.

Cada tipo primitivo tiene un rango diferente de valores positivos y negativos, excepto el boolean que sólo tiene dos valores: true y false. El tipo de datos que se seleccione para declarar las variables de un determinado programa dependerá del rango y tipo de valores que se vayan a almacenar en cada una de ellas.

Estos son los únicos elementos en Java que no son objetos. Están integrados en el sistema para que su uso sea más eficiente. Java proporciona una serie de clases para dar una funcionalidad añadida a cada uno de estos tipos primitivos, conocidas como clases de envoltorio. Son las clases Byte, Character, Short, Integer, Long, Float, Double y Boolean.

Los tipos byte, short, int y long se usan para declarar valores de tipo entero. Cada uno permite un mayor número de valores posibles dependiendo de la memoria que ocupan. El tipo char se usa para representar caracteres. Un carácter es representado internamente por un número entero con tamaño de 2 bytes. El tipo float se utiliza para declarar valores en coma flotante de 32 bits en el formato IEEE 754 (este formato utiliza 1 bit para el signo, 8 bits para el exponente y 23 para la mantisa). Por último el tipo double se utiliza para declarar un dato en coma flotante de 64 bits en el formato IEEE 754 (1 bit para el signo, 11 bits para el exponente y 52 para la mantisa).

Por otro lado tenemos los tipos referenciados o tipos objeto. En este grupo están incluidas las clases, las interfaces y los arrays. Por ejemplo la clase String es un tipo referenciado.


1.8.1.4. Literales

Un literal es la expresión de un valor de un tipo primitivo, de un tipo String (cadena de caracteres) o la expresión null (valor nulo o desconocido). Un literal en Java puede ser un entero, un real, un valor booleano, un carácter, una cadena de caracteres y un valor nulo.

Los literales enteros se pueden especificar en Java en base 10 (decimal), 8 (octal) y 16 (hexadecimal). Un literal entero es de tipo int a no ser que se especifique lo contrario usando el sufijo l o L para indicar que es del tipo long.

Un literal entero decimal puede tener uno o más dígitos del 0 al 9, de los cuales el primero tiene que ser distinto de 0. Por ejemplo:

4326 es una constante entera de tipo int

4236L es una constante entera de tipo long


Un literal entero octal puede tener uno o más dígitos del 0 al 7, precedidos por un 0. Por ejemplo:

0326 es una constante entera de tipo int en base 8


Un literal entero hexadecimal puede tener uno o más dígitos del 0 al 9 y letras de la A a la F (en mayúsculas o minúsculas) precedidos por 0x o 0X. Por ejemplo:

256: número entero 256 expresado en decimal
0400: número entero 256 expresado en octal
0x100: número entero 256 expresado en hexadecimal
-0400: número entero -256 expresado en octal
-0x100: número entero -256 expresado en hexadecimal

Los literales reales están formados por una parte entera, seguido de un punto decimal y una parte fraccionaria. También se permite la notación científica, en cuyo caso se añade al valor una e o E, seguida por un exponente positivo o negativo. Una constante real tiene siempre tipo double a no ser que se añada el sufijo f o F para especificar que es de tipo float. También se puede usar el sufijo d o D para indicar explícitamente que es de tipo double.

-19.27: número real de tipo double
19.27008: número real de tipo double
.00258: número real de tipo double
27E-8: número real de tipo double
-19.27F: número real de tipo float
-19.27D: número real de tipo double

Los literales de un solo carácter están formados por un único carácter encerrado entre comillas simples. Una secuencia de escape se considera un único carácter.

‘ ‘: espacio en blanco
‘c’: letra minúscula c
‘\n’: retorno de carro más avance de línea
‘\u0007’: pitido
‘\u001B’: carácter ASCII Esc

Un literal de cadena de caracteres es una secuencia de caracteres encerrados entre comillas dobles (incluidas las secuencias de escape como \”).

“Esto es una constante de caracteres”
“3.1415926”
“” // cadena vacía
“Lenguaje \”Java\”” // produce: Lenguaje “Java”

Las cadenas de caracteres en Java son objetos de la clase String. Cada vez que en un programa se utilice un literal de cadena de caracteres, Java crea de forma automática un objeto String con el valor del literal. Las cadenas de caracteres se pueden unir o concatenar empleando el operador +. El siguiente ejemplo une la cadenas "bienvenido a " con "Java" y muestra el resultado en la consola:

System.out.println ("bienvenido a "+"Java");


1.8.1.5. Identificadores

Los identificadores son nombres dados a los distintos elementos que forman un programa. Un identificador consta de uno o más caracteres. El primer carácter debe ser una letra, el carácter de subrayado o el carácter dólar. Lo que significa que un identificador no puede comenzar por un dígito ni puede contener caracteres especiales.

Las letras pueden ser mayúsculas o minúsculas. Para Java una letra mayúscula es un carácter diferente a esa misma letra en minúscula.

1.8.1.6. Palabras reservadas

Las palabras reservadas son identificadores predefinidos en Java que tienen un significado especial para el compilador. Estas palabras reservadas no se pueden usar como identificadores definidos por el usuario. Estas son las siguientes palabras reservadas:


Las palabras reservadas se escriben siempre en minúsculas.

1.8.1.7. Comentarios

Un comentario es un mensaje a cualquiera que lea el código fuente. Añadiendo comentarios se hace más fácil la comprensión de un programa. La finalidad de los comentarios es explicar el código fuente. El compilador no los usa para nada. En Java existen tres tipos de comentarios:

  • Comentario de una sola línea. Este tipo de comentario comienza con una doble barra (//) y se extiende hasta el final de la línea. Por ejemplo:
// Esto es un comentario de una sola línea

  • Comentario multilínea. Este tipo de comentario comienza con los caracteres /* y se extiende hasta que se encuentran los caracteres */. Pueden ocupar varias líneas, pero no pueden anidarse.
/*
Esto es un comentario multilínea. Empieza en la
línea anterior y puede ocupar más de una línea
*/

  • Comentario de documentación. Este tipo de comentario empieza con los caracteres /** y termina con */. Son unos comentarios especiales que son usados por una utilidad llamada javadoc que permite generar la documentación acerca del programa, aunque también se pueden usar de manera idéntica a los comentarios multilínea.
/**
Comentario multilínea o para que la utilidad javadoc
genere la documentación del programa
*/

1.8.1.8. Variables

Una variable representa un espacio de memoria para almacenar un valor de un determinado tipo. El valor de una variable puede cambiar durante la ejecución de un programa. Para usar una variable en un programa, primero hay que declararla. La declaración de una variable consiste en enunciar el nombre de la misma y asociarle un tipo determinado.



tipo nombre_variable;



Se pueden declarar varias variables del mismo tipo a la vez indicando el tipo y separando los nombres de las variables con comas.



tipo variable1, variable2;



El tipo de la variable, ya sea primitivo o referenciado, determina los valores que puede tomar así como las operaciones que se pueden realizar.



int numero;
String nombre, apellidos;



Las variables declaradas dentro de un bloque, delimitado por los caracteres { y }, sólo son accesibles directamente en ese bloque o en otros bloques anidados.

Una vez que se ha declarado una variable el siguiente paso es inicializarlas. Cuando una variable se declara directamente en el bloque correspondiente al cuerpo de la clase, se inicializa con un valor por defecto. En el caso de tipos numéricos el valor por defecto es el 0, mientras que para los tipos referenciados el valor por defecto es null. También pueden ser inicializadas explícitamente escribiendo el signo = y el valor deseado justo después del nombre de la variable. Una variable declarada en el interior del cuerpo de la clase, pero fuera de los métodos, se llama variable miembro de la clase (atributo de la clase). En caso de que una variable sea declarada en el interior de un método siempre debemos inicializarla explícitamente. Estas variables se denominan variables locales. Se puede realizar la inicialización junto con la declaración o como dos pasos independientes.



String nombre = “Ruth”; // declaramos e inicializamos
                        // la variable
int i, j = 19; // declaramos i y declaramos e
               // inicializamos j
i = 8; // inicializamos i que estaba declarada
       // anteriormente



1.8.1.9. Constantes

Declarar una constante permite indicarle al compilador el nombre que va a tener un determinado valor fijo. Para hacerlo debemos usar las palabras reservadas final y static anteponiéndolas al tipo y nombre de la constante. Además debemos inicializar la constante con el valor deseado.

Cuando usamos la palabra reservada final estamos indicando que el elemento que estamos declarando no se va a poder modificar durante la ejecución del programa.

final double PI = 3.14;



A la hora de declarar una constante pueden darse dos casos, que la constante se declare en el bloque correspondiente a la clase o dentro de un método. Cuando se declara en el bloque correspondiente a la clase se puede usar además del calificador final el calificador static. Cuando se usa static sólo existirá una copia de la constante para todos los objetos que se declaren de esa clase. Si no se especifica static, cada objeto incluirá su propia copia de la constante, cosa que no parece muy lógica ya que se trata del mismo valor constante. En el segundo caso no se puede usar static. La constante sólo es visible dentro del método y sólo existe durante la ejecución del mismo.



La palabra reservada static también puede usarse para variables, creando lo que se denomina variable de clase, que será compartida por todos los objetos que se creen de la clase. En posteriores temas se abordará con detenimiento el estudio de este modificador.

1.8.1.10. Expresiones numéricas

Una expresión es un conjunto de operandos unidos mediante operadores para especificar una operación determinada. Todas las expresiones retornan un valor cuando son evaluadas.



a + 1
suma + c
cantidad * precio
7 * Math.sqrt(a) – b / 2



1.8.1.11. Conversión de tipos

Cuando Java tiene que evaluar una expresión en la que aparecen operandos de distintos tipos, lo primero que tiene que hacer es convertiros, sólo para realizar las operaciones solicitadas, al tipo del operando que tenga mayor precisión. Cuando se trata de una asignación lo que ocurre es que se convierte el valor de la derecha del igual al tipo de la variable de la izquierda siempre que no haya pérdida de información en la conversión. En otro caso Java exige que la conversión se realice explícitamente. El siguiente equema muestra los tipos primitivos colocados de menos precisos a más precisos:

  • byte
  • short y char
  • int
  • long
  • float
  • double

Java permite una conversión explícita (conversión forzada) del tipo de una expresión mediante una construcción denominada cast, que tiene la forma:



(tipo) expresión



Cualquier valor de un tipo entero o real puede ser convertido a o desde cualquier tipo numérico. No se pueden realizar conversiones entre los tipos enteros o reales y el tipo boolean.



float f = 0;
double d = 2;
f = (float)d; // se hace un cast ya que se
              // puede perder precisión



1.8.1.12. Operadores

Los operadores son símbolos que indican cómo son manipulados los datos. Se pueden clasificar en los siguientes grupos:



  • Aritméticos
  • Relacionales
  • Lógicos
  • Unarios
  • A nivel de bits
  • De asignación
  • Operador condicional


Los operadores aritméticos son los siguientes:

+ - * / %







 



Este capítulo forma parte del Máster de Java-J2EE-XML-AJAX del Grupo SYNCROM.
Más información en
www.syncrom.com o en el Microsite del Máster OnLine de Java-J2EE


Capítulo 1. Aspectos básicos de Java (V)

1.7.2. Utilización del IDE NetBeans



El Entorno de desarrollo NetBeans es uno de los más utilizados para la creación de aplicaciones Java. Se trata de un entorno sencillo de manejar y potente, además, es de libre distribución, por lo que podremos descargarlo de forma gratuita desde la página www.netbeans.org.


Una vez que dentro de la zona de descargas, se nos presenta un cuadro con los distintos paquetes de opciones para descargar. Nosotros utilizaremos el indicado en la figura 6; dicha instalación, incluye todas las librerías y plantillas necesarias para crear cualquier tipo de aplicación Java, tanto estándar como enterprise.


 
 
Es importante tener en cuenta que antes de proceder a la instalación de NetBeans, debemos tener instalado en nuestra máquina el JDK con la versión apropiada (en nuestro caso, la 1.6).



1.7.2.1. Creación de un proyecto de consola con NetBeans


Una vez instalado el IDE, procedemos a la creación de nuestro primer programa usando este entorno.


Todas las aplicaciones creadas con NetBeans se agrupan en proyecto, así pues, debemos elegir la opción de menú File -> New Proyect. Al hacer nos aparecerá un cuadro de diálogo como el de la figura 7 en el que debemos elegir el tipo de proyecto que queremos crear, en nuestro caso, dado se trata de una aplicación Java estándar, elegiremos el tipo de proyecto "Java application".


 
 
NetBeans dispone de una plantilla especial para cada tipo de proyecto que facilita su construcción, realizando todas las configuraciones necesarias para su funcionamiento.



En la siguiente ventana (Figura 8), se nos solicitará el nombre del proyecto y su ubicación, así como el nombre de la clase que incluirá el método main(). En este caso, utilizaremos el mismo nombre para clase y proyecto. Si quisiéramos incluir la clase en un paquete, se escribiría el nombre de éste delante del de la clase seguido de un punto “.”.


Al pulsar el botón finalizar nos aparecerá la vista de código de la clase. Como vemos, gran parte del trabajo de escritura del código ya ha sido realizado por NetBeans, nosotros únicamente nos tendremos que preocupar de escribir el código en el interior de main().


Según vamos escribiendo las instrucciones para la generación del mensaje de bienvenida, vemos como el entorno nos va mostrando una ayuda en línea que nos facilita la escritura de los distintos elementos que componen la instrucción (Figura 9).


 
 
 
 
Una vez completado el código, procedemos a la compilación y ejecución de la clase. Para ello elegiremos la opción de menú Run -> Run Main Proyect o pulsamos el botón con la forma de triángulo del cuadro de herramientas. Al hacer esto, se procederá a la compilación del código y posteriormente a su ejecución, mostrándose el resultado en la ventana inferior de NetBeans.
 
 
Si queremos compilar primero y ejecutar después, elegiríamos en primer lugar la opción de menú Build -> Build Main Proyect. Con esto se produce la compilación de la clase, indicándose los errores en la ventana de salida que aparece en la zona inferior de NetBeans. Seguidamente ejecutaríamos la clase con la opción indicada anteriormente (Run -> Run Main Proyect).



Este capítulo forma parte del Máster de Java-J2EE-XML-AJAX del Grupo SYNCROM.
Más información en
www.syncrom.com o en el Microsite del Máster de Java-J2EE


Capítulo 1. Aspectos básicos de Java (IV)

1.7. Editar, compilar y ejecutar programas


En este capítulo explicaremos como compilar y ejecutar programas en Java, tomando como ejemplo el programa de bienvenida que hemos presentado anteriormente.


Estas operaciones pueden ser llevadas a cabo mediante las herramientas del SDK de Java o utilizando un entorno de desarrollo que las lleve incorporadas. Vamos a estudiar el empleo de ambas opciones.


1.7.1. Utilización de las herramientas del SDK


Aunque en la gran mayoría de las ocasiones se utilizarán IDE’s para la construcción de programas Java, es importante conocer como se realizan estas operaciones a un más bajo nivel. Por ello, comenzaremos analizando la forma de trabajar de los comandos básicos del SDK.


Estos comandos podemos encontrarlos en la carpeta \bin del directorio de instalación del SDK. Si aun no lo tenemos instalado podemos descargarlo de forma gratuita de la página Web de Java: http://java.sun.com. Aquí, dentro de la zona de descargas para la edición estándar, elegiremos la última de las versiones existentes de esta plataforma, actualmente la versión JDK 1.6 (comercialmente llamada Java 6).


Tras la instalación del SDK se crearán una serie de directorios en la ubicación que le hemos indicado, entre ellos el directorio \bin donde están los comandos javac.exe y java.exe (ver figura 2).


Antes de poder utilizar estos comandos, será necesario configurar en nuestra máquina ciertas variables del sistema.


 
 

1.7.1.1. Las variables de entorno PATH y CLASSPATH



Las variables de entorno almacenan datos que pueden ser consultados por las distintas aplicaciones instaladas en nuestro ordenador. En el caso concreto de PATH y CLASSPATH, almacenan información necesaria para poder compilar y ejecutar aplicaciones con el JDK de Java desde cualquier parte del equipo


La manera de configurar una variable de entorno depende del sistema operativo de la máquina; en el caso concreto de Windows, esta operación se realiza a través del panel de control.


La variable de entorno PATH


Esta variable debe contener la ruta de la carpeta del JDK donde se encuentran las herramientas para compilación y ejecución de programas, es decir, la carpeta \bin del directorio de instalación del JDK:


 
 
El motivo por el que se incluye esta dirección en la variable PATH es para permitir que puedan invocarse los comandos de compilación y ejecución de programas desde cualquier directorio del disco.



La variable de entorno CLASSPATH


De cara a que se puedan localizar las clases utilizadas por un programa, tanto a la hora de compilarlo como a la hora de ejecutarlo, la variable de entorno CLASSPATH debe contener las direcciones de las carpetas donde se encuentran los archivos .class utilizados por nuestro programa, incluido el propio .class del programa que se va a ejecutar.


Normalmente, las direcciones de las clases del JDK no es necesario incluirlas en el CLASSPATH ya que implícitamente el compilador sabe dónde encontrarlas. Como normalmente se suele ejecutar un programa desde el mismo directorio en el que se encuentra, se suele incluir el valor “.” en la variable CLASSPATH para hacer referencia al directorio actual.


1.7.1.2. Compilación de una clase Java


Una vez configuradas las variables de entorno, procedemos a codificar el programa, para lo cual utilizaremos un editor de texto cualquiera. El resultado final lo almacenaremos como un archivo de texto con extensión .java y nombre igual al de la clase (Ejemplo.java). Es importante destacar en este punto que el nombre de un archivo de código fuente Java deberá tener el mismo nombre que la clase definida como pública (public).


Seguidamente, podemos proceder a su compilación, la cual generará como resultado un archivo .class por cada clase incluida en el código fuente. En este caso, se generará un único archivo llamado Ejemplo.class.


La compilación se llevará a cabo mediante el comando javac.exe del JDK. Para ello, nos situaremos con la consola de comandos en el directorio donde se encuentra el archivo .java, en nuestro caso donde hayamos colocado el programa Ejemplo.java, y teclearemos:


javac Ejemplo.java






Si el código no presenta ningún error de sintaxis la compilación se hará correctamente y no se generará ningún mensaje de aviso, volviéndose a mostrar en pantalla la línea de comandos.


Empaquetado de una clase Java


Normalmente, las clases Java se estructuran en paquetes. Aunque en temas posteriores volveremos a hablar de los paquetes, es necesario saber que el empaquetado de las clases facilita la organización de las mismas, agrupando en un mismo paquete clases que realicen alguna función similar o estén relacionadas de alguna manera.


Hay que pensar que los paquetes son para las clases lo que las carpetas son para los archivos de un disco. De hecho, físicamente, los paquetes no dejan de ser eso, carpetas o directorios donde se almacenan los archivos .class.


De cara a conseguir distintos niveles organizativos, un paquete puede dividirse a su vez en subpaquetes y cada uno de estos contener nuevos subpaquetes, así hasta conseguir los niveles de anidación que consideremos necesarios.


 
 
En la figura 4 vemos un ejemplo de organización de paquetes, donde una determinada clase llamada Miclase.class se encuentra dentro de un paquete en un tercer nivel de anidación.



Cuando las clase se encuentran dentro de paquetes, el nombre identificativo de la clase, denominado nombre cualificado, es el formado por el nombre de la misma precedido por los distintos paquetes en que se encuentra. Ya veremos más adelante las implicaciones que tiene en un programa de cara a la utilización de las mismas el tener clases incluidas dentro de paquetes.


A la hora de definir la clase, si queremos que esta forme parte de un determinado paquete será necesario indicarlo mediante la sentencia package, sentencia que debe ser la primera en aparecer dentro del archivo .java. En el caso de la clase de ejemplo que aparece en la figura 4, la definición de la misma sería:


package principal.secundario1.subnivel;


public class Miclase{


:


}






Para compilar una clase que está definida dentro de un paquete, se debería utilizar el siguiente formato del comando javac desde el directorio en el que se encuentra el archivo .java (directorio actual):


javac –d . NombreClase.java






En el ejemplo anterior:


javac –d . Miclase.java






Donde el atributo “d” del comando indica que la clase será incluida en el directorio indicado en la sentencia package, mientras que el punto “.” indicaría que la ruta de ese directorio comienza desde el directorio actual. Si dicho directorio no existiera en el momento de la compilación, se crearía al ejecutar el comando anterior. En cualquier caso, la situación final sería la indicada en la figura 4.


1.7.1.3. Ejecución de una clase Java


Como resultado de la compilación, se habrá generado en el mismo directorio en el que se encuentra el archivo de código fuente .java un archivo bytecode llamado Ejemplo.class. Este archivo, tal y como hemos comentado al principio, puede ser transportado a otro equipo para proceder a su ejecución. Dicha ejecución es llevada a cabo también desde la consola de comandos a través del programa java.exe, seguido del nombre de la clase que contiene al método main(). Si seguimos en el directorio donde se encuentra el archivo Ejemplo.class teclearemos lo siguiente para realizar su ejecución:


java Ejemplo






Obsérvese que no se debe especificar la extensión .class para ejecutar la clase que contiene al método main().


Una vez invocado el comando anterior, el programa se ejecutará y mostrará en la consola el mensaje de saludo que definimos durante la codificación del método, tal y como se indica en la figura 5.


 
 
Si la clase estuviera contenida en un paquete, la llamada al comando java.exe debería realizarse desde el directorio actual (el raíz del paquete o desde el que se realizó la compilación) utilizando el siguiente formato:



java paquete.subpaquete.NombreClase






Por ejemplo, para ejecutar la clase Miclase creada según el diagrama de la figura 4, debería especificarse:


java principal.secundario1.subnivel.Miclase






Este capítulo forma parte del Máster de Java-J2EE-XML-AJAX del Grupo SYNCROM.
Más información en
www.syncrom.com o en el Microsite del Máster OnLine de Java-J2EE


Capítulo 1. Aspectos básicos de Java (III)

1.6. Compilación y ejecución de programas Java


Una vez escrito el código fuente del programa, es necesario realizar dos operaciones para poder ver los resultados:


- Compilación. Operación consistente en transformar el código fuente en un código intermedio, conocido como bytecode, que no está ligado a ningún sistema operativo concreto, sino a un entorno de ejecución conocido como Máquina Virtual Java. Esto, como ya hemos comentado antes, permite la portabilidad del código entre distintas plataformas. Los bytecodes son almacenados en archivos .class, tal y como se ilustra en la figura 1.


- Como explicaremos más adelante, la compilación de un programa Java se realiza clase a clase a través de la utilidad javac.exe proporcionada por el software de desarrollo para Java de Sun (SDK), utilidad ésta que debe invocada a través de la consola de comandos.


- Ejecución. La ejecución, que no tiene porqué llevarse a cabo en la misma máquina donde se ha realizado la compilación, consiste en traducir los bytecodes a código máquina nativo y realizar la ejecución del mismo. Esta operación es realizada por un intérprete incorporado en la JVM y que es invocado a través del comando java.exe proporcionado por el SDK.


Durante la fase de desarrollo de los programas, los programadores realizan constantemente las tareas de compilación y posterior ejecución del código para probar su funcionamiento. Es por ello que, en vez de utilizar directamente las utilidades javac y java desde la línea de comandos, se haga uso de algún entorno de desarrollo integrado (IDE) que facilite la realización de estas tareas, abstrayendo al programador de los detalles asociados al empleo directo de estas utilidades.



Existen una amplia variedad de IDEs para Java a disposición de los programadores; unos de libre distribución y otros con licencia. Uno de los más populares, y que será el que utilicemos nosotros en el curso es NetBeans. NetBeans es un potente entorno de desarrollo de libre distribución que podemos encontrar en la página www.netbeans.org. Con este entorno podremos desarrollar cualquier aplicación Java, tanto estándar como enterprise, de una manera sencilla.




Este capítulo forma parte del Máster de Java-J2EE-XML-AJAX del Grupo SYNCROM.
Más información en
www.syncrom.com o en el Microsite del Máster OnLine de Java-J2EE

Capitulo 1. Aspectos básicos de Java (II)

1.4. El método main.

Todo programa Java, independientemente del número de clases que lo formen, debe contener en alguna de sus clases un método, conocido como método main o principal, que constituirá el punto de inicio de la aplicación. Este método, será invocado por la Máquina Virtual de Java cuando le demos la orden de ejecutar el programa; dicho método tendrá que tener un formato específico, formato definido por la especificación de Sun.

El formato del método main será el siguiente:

public static void main (String [] args)
{
  //contenido del método
}


Poco a poco iremos explicando el significado de cada una de las palabras clave que aparecen en la definición del método. De momento quedémonos con el nombre de éste (main) y con el tipo de devolución (void) que significa que el método no devolverá ningún resultado al punto de llamada, algo lógico en este caso pues quien hace la llamada al método es la JVM y ésta no debe esperar ningún resultado tras su ejecución.


1.5. Programa básico en Java

Llegados a este punto, vamos crear nuestro primer programa en Java, consistente en una sencilla aplicación que muestre en la consola de comandos (antiguamente conocida como ventana MS-DOS) un mensaje de bienvenida.

Para esta aplicación solo necesitaremos crear una única clase con un único método, el método main(), en el que codificaremos la instrucción encargada de mostrar el mensaje. He aquí el código de nuestra clase:

public class Ejemplo
{
  public static void main (String[] args)
  {
    System.out.println("Mi primer programa Java");
  }
}


Aunque tendremos oportunidad de analizar más adelante los elementos que componen la instrucción anterior, es importante comentar que el envío del mensaje a la consola es realizado a través de un método (println) de una de las clases incorporadas en el Java estándar. Esto viene a demostrar una de las características de la programación en Java, y es que además de las instrucciones propias de cualquier lenguaje de programación, la realización de cualquier programa requiere el uso de diferentes clases incluidas en la plataforma para conseguir la funcionalidad requerida.




Este capítulo forma parte del Máster de Java-J2EE-XML-AJAX del Grupo SYNCROM.
Más información en
www.syncrom.com o en el Microsite del Máster OnLine de Java-J2EE


Capítulo 1: Aspectos básicos de Java

Aspectos básicos de Java

Cuando hablamos de Java no debemos pensar únicamente en un lenguaje de programación. La plataforma Java proporciona, además de un lenguaje de programación, todo un conjunto de especificaciones, tecnologías y librerías de clases, mediante los cuales se pueden crear diferentes tipos de programas informáticos capaces de ser ejecutados en una amplia variedad de sistemas operativos.



Esta independencia del sistema operativo ha contribuido a que numerosos fabricantes software hayan apostado por esta tecnología, desarrollando productos y herramientas que facilitan la labor de programador y ayudan a aumentar la potencia y rendimiento de las aplicaciones creadas con Java.


Así pues no es de extrañar la enorme penetración que Java tiene en el mundo del software, siendo la principal opción para numerosas Empresas y programadores independientes a la hora de acometer sus desarrollos.


1.1. La Máquina Vitual Java

“Escribe una vez y ejecuta en cualquier parte”, este es el lema que lanzaron los creadores de Java cuando lanzaron la primera versión de la plataforma y, básicamente, se refiere al hecho de poder crear y compilar un programa en Java en una determinada máquina y poderlo ejecutar después en diferentes sistemas operativos, sin necesidad de sucesivas recompiaciones del código.



Y todo esto es posible gracias a la existencia de un entorno de ejecución, conocido como Máquina Virtual Java o JVM, capaz de traducir en tiempo de ejecución el código compilado a código ejecutable nativo para un sistema operativo particular.


Esto supone la necesidad de que en el equipo donde se va a ejecutar el programa exista una versión de JVM para ese sistema operativo particular. Esto actualmente no supone ningún problema, ya que la mayoría de los sistemas operativos modernos disponen de JVM que además se incluye como una propia extensión del sistema.


 
1.2. Ediciones Java



Java, en lo que a lenguaje de programación se refiere, existe solamente uno, sin embargo, el rápido aumento del número de clases para trabajar con Java que iban apareciendo con cada nueva versión de la plataforma, obligó a Sun organizar ésta en tres niveles o ediciones y distribuir entre ellas las distintas librerías disponibles, enfocándose cada una de estas ediciones en un tipo de desarrollo concreto:


- Java Standar Edition (Java SE). Digamos que esta edición proporciona lo básico para trabajar en Java, incluyendo:


  • Herramientas para la compilación y ejecución de programas.
  • Runtime de Java. O lo que es lo mismo, la Máquina Virtual de Java y todas aquellas clases de uso general necesarias para la construcción y ejecución de cualquier tipo de programa Java.
  • Como añadido, Java SE también contiene clases para la construcción de interfaces gráficas de usuario y para acceso a bases de datos.
- Java Enterprise Edition (Java EE). Esta edición incluye todas las clases necesarias para la construcción de aplicaciones Internet/intranet con Java.


- Java Micro Edition (Java ME). Proporciona todo el soporte necesario para la creación de aplicaciones que puedan ser ejecutadas en dispositivos de pequeño tamaño, tales como teléfonos móviles o agendas electrónicas. En este sentido, Java ME incluye:


  • Una versión reducida de la Máquina Virtual Java para este tipo de dispositivos (KVM).
  • Librerías de clases específicas para este tipo de aplicaciones.
Estas ediciones pueden descargarse libremente desde el sitio Web de Java Sun: http://java.sun.com/.



1.3. Estructura de un programa Java


A la hora de escribir una aplicación en Java, debemos de tener en cuenta que todo programa escrito en este lenguaje se estructura en clases. Aún es pronto para intentar comprender el concepto de clase, de momento bastará indicar que una clase es un conjunto de métodos (funciones) que se encargan de realizar un tareas que tienen algún tipo de relación entre ellas.


Por ejemplo, una clase llamada GestionEmpleados podría estar compuesta de métodos que realizaran operaciones con los empleados de una empresa, como altas y bajas de empleados, búsquedas a partir de un identificador, etc.


Además de métodos, las clases pueden incluir datos (llamados campos o atributos) que sean compartidos por todos los métodos de la clase.


Para definir una clase en Java se utiliza la sintaxis:


class NombreClase
{
  //contenido de la clase
}



NombreClase sería el nombre que le queremos asignar a nuestra clase. Las reglas que debe cumplir un nombre de clase son muy básicas: no puede coincidir con ninguna palabra reservada del lenguaje y entre los caracteres que lo forman no se pueden incluir espacios ni signos de puntuación. Por otro lado, suele seguirse el convenio de que la primera letra de cada palabra que compone el nombre se escriba en mayúsculas, mientras que el resto lo harán en minúsculas.




Este capítulo forma parte del Máster de Java-J2EE-XML-AJAX del Grupo SYNCROM.
Más información en
www.syncrom.com o en el Microsite del Máster OnLine de Java-J2EE