Manual JAVA
Manual JAVA
Originalmente, Java no fue creado para la red Internet. La primera versin de Java empez en 1991 y fue escrita en 18 meses en Sun Microsystems. De hecho, en ese momento, ni siquiera se llam Java; se llam Oak y se utiliz en Sun para uso interno. La idea original para Oak era crear un lenguaje orientado a objetos independiente de la plataforma. Por entonces, muchos programadores se limitaban a la programacin del IBM PC, pero el entorno corporativo poda incluir toda clase de plataformas de programacin, desde el PC hasta los grandes sistemas. Lo que haba detrs de Oak era crear algo que se pudiera usar en todos los ordenadores ( y ahora que Java se ha hecho popular gracias a la red Internet, cada vez ms corporaciones estn adoptndolo para uso interno en lugar de C++, precisamente por esa razn). El lanzamiento original de Oak no fue especialmente fascinante; Sun quera crear un lenguaje que se pudiera usar en electrnica. Oak pas a llamarse Java en 1995, cuando se lanz para el uso pblico y supuso un xito casi inmediato. En ese momento, Java haba adoptado un modelo que lo hizo perfecto para la red Internet, el modelo bytecode.
gran variedad de ordenadores, Sun slo tuvo que rescribir JVM para que funcionara en esos ordenadores. Dado que su programa est almacenado en un archivo de bytecode, se ejecutar en cualquier ordenador en el que JVM est instalado. Aunque en un principio se supona que los programas Java eran interpreta- dos por JVM, es decir, ejecutados bytecode por bytecode, la interpretacin poda ser un proceso lento. Por esta razn, Java 2 incorpora la compilacin al instante Just in Time (JIT) en JVM. El compilador JIT realmente lee los bytecodes por secciones y los compila de forma interactiva en lenguaje mquina, por lo que el programa puede ejecutarse ms rpido ( todo el programa Java no se compila de una vez, ya que Java va realizando comprobaciones en tiempo de ejecucin en varias secciones del cdigo). Desde su punto de vista, esto quiere decir que su programa Java se ejecutar ms rpido con el nuevo compilador JIT. Utilizar bytecodes significa que los programas Java son muy compactos, lo que les hace ideales para descargarlos en la red Internet. Y otra ventaja a la hora de ejecutar tales programas con JVM, mayor que la descarga de programas, es la seguridad.
Adems se puede configurar la seguridad de Java de la forma que se desee, ofreciendo una solucin muy flexible. Por ejemplo, como ver en este libro, ahora puede especificar, tomando como base programa por programa, aquellos privilegios que quiera dar para descargar cdigo. Adems, ahora puede firmar su cdigo Java de forma que muestre de dnde procede para evitar modificaciones malvolas. Echaremos un vistazo a todo esto y ms a lo largo de este libro. Como puede observar, Java tiene una baza ganada en la red Internet: los programas Java son pequeos, seguros, independientes de la plataforma, orientados a objetos, y potentes. Adems presentan otras caractersticas que gustan a los programadores. Los programas Java son robustos (lo que significa que son fiables y pueden gestionar bien los errores), con frecuencia son sencillos de escribir comparados con C++, son multihilo (pueden ejecutar un nmero de tareas al mismo tiempo, lo cual es
3
til cuando se quiere continuar haciendo otras cosas mientras se espera a que un archivo de datos se descargue, por ejemplo) y ofrecen un alto rendimiento. El resultado final es que se puede escribir un programa Java una vez y puede descargarse fcilmente y ejecutarse en todo tipo de mquinas, la receta perfecta para la red Internet. Esta es la razn por la que Java ha llegado tan alto. Java no tiene como nico objetivo a la red Internet; de hecho, hay dos tipos de programas Java, uno para el uso de la red Internet y otro para el uso en una mquina local.
Adems de applets descargables, Java soporta aplicaciones que estn dise- adas para ejecutarse localmente. Las aplicaciones Java funcionan como otras aplicaciones de ordenador, puede instalarlas y ejecutarlas en el suyo. Al estar instaladas localmente en vez de ser descargadas con una pgina Web, las aplicaciones tienen ms privilegios que las applets, como es la capacidad para leer y escribir archivos. Las aplicaciones que usaremos en los siguientes captulos sern el tipo ms sencillo de aplicaciones Java: aplicaciones consola. Son aplicaciones basadas en texto que se ejecutan desde la lnea de comandos (en Windows esto quiere decir desde una ventana DOS), y pueden leer y visualizar texto. En este captulo comprobar cmo tales aplicaciones funcionan. Por ejemplo, podr decir que tiene una aplicacin Java llamada app que visualiza el mensa- je "Hola desde Java!" (acaba de ver cmo lo hace la applet). En este caso, la aplicacin visualizar este mensaje en la pantalla. Ejecute la aplicacin arran- cando la mquina virtual de Java con el comando Java, pasndole el nombre de la aplicacin que quiere ejecutar. En Unix, sera as, donde '%' es el command prompt:
Las aplicaciones Java pueden ser grficas? Realmente pueden serlo, y de hecho, la mayora de ellas lo son. En este caso, la aplicacin es responsable de arrancar su propia ventana (el visualizador de applets lo har).
Hay que descargar e instalar Java, lo que significa descargar Java Development Kit (JDK), que est disponible en http://java.sun.com/products/ jdW1.21 (1.2 se refiere a la versin de JDK, que ahora se llama Java 2 Development Kit, versin 1.2.2 en el momento de escribir este manual). Despus de descargar JDK, generalmente como un paquete ejecutable autoinstalable, seguir las instrucciones de instalacin en el sitio Web java.sun.com; por ejemplo, las instrucciones de instalacin en Windows estn en http://java.sun.comlproducts/jdW1.2/installwindows.html, y para Solaris se encuentran en http://java.sun.com/products/jdk/1.2/install- solaris.htm1.
case: Se utiliza en las sentencias switch para indicar bloques de texto. cast: Reservada para uso futuro. catch: Captura las excepciones generadas por las sentencias try. char: Tipo de dato que puede soportar caracteres Unicode sin signo en16 bits. class: Declara una clase nueva. const: Reservada para uso futuro. continue: Devuelve el control a la salida de un bucle. default: Indica el bloque de cdigo por defecto en una sentencia switch. do: Inicia un bucle do-while. double: Tipo de dato que soporta nmeros en coma flotante, 64 bits. else: Indica la opcin alternativa en una sentencia if. extends: Indica que una clase es derivada de otra o de una interfaz. final: Indica que una variable soporta un valor constante o que un mtodo no se sobrescribir. finally: Indica un bloque de cdigo en una estructura try - catch que siempre se ejecutar. flota: Tipo de dato que soporta un nmero en coma flotante en 32 bits. for: Utilizado para iniciar un bucle for. future: Reservada para uso futuro. generic: Reservada para uso futuro. goto: Reservada para uso futuro.
implementa una interfaz especfica. int: Tipo de dato que puede soportar un entero con signo de 32 bits. interface: Declara una interfaz. long: Tipo de dato que soporta un entero de 64 bits. native: Especifica que un mtodo est implementado con cdigo nativo (especfico de la plataforma). new: Crea objetos nuevos. null: Indica que una referencia no se refiere a nada. operator: Reservado para uso futuro. . outer: Reservado para uso futuro. package: Declara un paquete Java. private: Especificador de acceso que indica que un mtodo o variable slo puede ser accesible desde la clase en la que est declarado. protected: Especificador de acceso que indica que un mtodo o variable slo puede ser accesible desde la clase en la que est declarado (o una subclase de la clase en la que est declarada u otras clases del mismo paquete). public: Especificador de acceso utilizado para clases, interfaces, mtodos
super: Se refiere a una clase base de la clase (utilizado en un mtodo o constructor de clase). switch: Sentencia que ejecuta cdigo basndose en un valor. synchronized: Especifica secciones o mtodos crticos de cdigo multihilo. this: Se refiere al objeto actual en un mtodo o constructor throw: Crea una excepcin. throws: Indica qu excepciones puede proporcionar un mtodo, transient: Especifica que una variable no es parte del estado persistente de un objeto. try: Inicia un bloque de cdigo que es comprobado para las excepciones. var: Reservado para uso futuro. void: Especifica que un mtodo no devuelve ningn valor. volatile: Indica que una variable puede cambiar de forma asncrona. while: Inicia un bucle while.
Un pro grama puede construir se empleando varias clases. En el caso ms simple se utilizar una nica clase. Esta clase contiene el programa, rutina o mtodo principal: main() y en ste se incluyen las sentencias del programa principal. Estas sentencias se separan entre s por caracteres de punto y coma.
public class ClasePrincipal { public static void main(String[] args) { sentencia_1; sentencia_2; // ... sentencia_N; }
Como primer ejemplo sencillo de pro grama escrito en Java se va a utilizar uno que muestra un mensaje por la pantalla del ordenador. Por ejemplo, el programa Hola.java:
*/ public class Hola { public static void main(String[] args) { System.out.println("Hola, "); System.out.println("me llamo Angel"); System.out.println("Hasta luego"); }
Como se ha indicado anteriormente, en un programa de Java todo se organiza dentro de las clases. En el ejemplo anterior, Hola es el nombre de la clase principal y del archivo que contiene el cdigo fuente. Todos los programas o aplicaciones independientes escritas en Java tienen un mtodo main o principal que, a su vez, contiene un conjunto de sentencias. En Java los conjuntos o bloques de sentencias se indican entre llaves { }. En el caso anterior, el conjunto de sentencias se reduce a tres sentencias, que so n llamadas a do s mtodos predefinido s en Java (print y println) que permiten visualizar texto por el dispositivo de salida de datos po r defecto (la pantalla).
Comentarios
Los comentario s se emplean para facilitar la tarea de lo s programadores humanos ya que no realizan ningn papel activo en la generacin del cdigo. Los comentarios que se pueden introducir en el c digo fuente de un programa de Java son del estilo de C y C++. As, el compilador ignora todo lo que se incluya entre la secuencia de caracteres // y el final de la lnea. Por ejemplo :
10
La pareja de caracteres / hay que escribirla sin dejar ningn espacio en blanco entre ellos. El segundo tipo de comentario es el que se utiliza tambin en
el lenguaje de pro gramaci n C: el compilador tambin ignora todo lo que se incluya entr e las secuencias de caracteres /* y */. Por ejemplo:
lo indica la marca */
El comentario con // es ms fcil de teclear si slo ocupa una lnea, pero si ocupa varias, entonces el ms sencillo es el de /* ... */. Los comentario s pueden incluir cualquier carcter vlido en Unicode y no pueden anidarse.
Estos dos formatos de comentario se emplean para los denominado s comentarios de implementacin. Los comentario s de implementacin se utilizan en el programa fuente para resaltar cdigo o para aclarar un desarrollo en particular.
Adems, en Java existe un tercer tipo de comentario (doc comments) que facilita la generacin de documentacin en formato HTML al emplear algunas herramientas de documentacin (por ejemplo, javadoc incluida en el Kit de Desarrollo de Java). Los comentarios para la documentacin se emplean para describir la especificacin del cdigo, desde una perspectiva independiente cmo se ha implementado y ser ledo por desarrolladores que no tengan necesariamente el cdigo fuente a la vista. Debe evitarse emplear los comentarios par a dar panormicas del cdigo y facilitar informacin que no facilite la propia lectura del cdigo. Ejemplos de este tipo de comentarios:
/** * Muchos programadores * suelen incluir un asterisco * al principio de cada linea del * comentario para facilitar su lectura */
Los comentarios deberan contener slo informacin relevante para la lectura y comprensin del pro grama. Todos los pro gramas deben empezar por un comentario que describa el pro psito del programa. La discusin de decisiones de diseo que no sean obvias (triviales) es apropiada, pero debe evitarse la duplicidad de informacin dada por el propio cdigo. Es muy comn que los comentarios redundantes se des actualicen. En general, se debe evitar incluir comentarios que puedan quedarse obsoleto s conforme el cdigo se desarrolle. Por ejemplo, dentro de un comentario no debera incluirse informacin acerca de cmo se ha construido un archivo fuente determinado o en que directorio se haya el cdigo . A veces la frecuencia de los comentarios refleja una peor calidad de cdigo. Cuando se sienta la necesidad de aadir un comentario, debe considerarse la reescritura del cdigo para hacerlo ms claro.
Todos los archivos fuente deberan comenzar con un comentario estilo C que liste el nombre de la clase, informacin de la versin, fecha y el aviso de copyright:
/* 12
*/
Identificadores
Los identificado res son nombres que se les asignan a variables, mtodos, clases en el cdigo fuente de un pro grama. Los identificadores slo existen en el cdigo del programa fuente y no en el programa objeto (resultado de la compilacin del programa fuente). Todo nuevo identificador que se emplee en un programa Java debe definirse previamente a su utilizacin. Las normas para la construccin de un identificador empleando el lenguaje de programacin Java son las siguientes:
Un identificador comienza por una letra, un carcter de subrayado (_) o un carcter de pesos ($). Aunque no se recomienda emplear el carcter $, ya que el compilador suele utilizarlo s de forma interna para crear identificadores propios. Los siguientes caracteres pueden ser tambin dgitos. Pero no pueden emplearse espacios en blanco u otros caracteres como el signo de interrogacin (?) o el signo de porcentaje (%). No hay lmite mximo de caracteres.
En los identificadores del cdigo fuente de un programa en Java se distinguen las maysculas de las minsculas. Por ejemplo, casa, CASA y Casa son tres identificado res diferentes. Pueden incluir caracteres Unicode, con lo que se pueden emplear secuencias de escape /uxxxx para representar
13
estos caracteres. No puede emplearse el identificador de una variable o cualquier otro elemento del cdigo fuente del programa para otro ya existente en el mismo bloque. Excepcin: variable miembro y local con el mismo identificador.
Existe una serie de palabras reservadas que no pueden emplearse como identificadores po r el programador en el cdigo fuente par a otros usos. Por ejemplo, la palabra double se utiliza para definir un tipo de dato real y la palabra for se emplea para construir un tipo determinado de bucle. En la Tabla 2.1 se muestran las palabras reservadas en Java.
abstract do implements protected throw boolean double import public throws break else instanceof rest transient byte extends int return true case false interface short try catch final long static void char finally native strictfp volatile class float new super while
const* for null switch continue goto* package synchronized
Algunos de estos identificadores reservados no tienen todava uso en la implementacin actual del lenguaje Java. En concreto , los identificadores marcados con un asterisco * no se utilizan actualmente.
14
Aunque la forma de escribir los identificado res en Java no est normalizada, a continuacin se dan algunas recomendaciones para la eleccin n de estos identificadores:
Es conveniente utilizar identificadores auto explicativos para orientar al usuario o a cualquier otra persona que accede al cdigo fuente de un programa sobre lo que representan, sin necesidad de utilizar los comentarios en el propio cdigo fuente. Por ejemplo, para almacenar el valor del radio de una esfera podra declararse una variable con el identificador radio, radioesfera o radiodeunaesfera.
Si el identificador se compone de ms de una palabra, stas se agrupan y despus de la primera el resto comienza con una letra mayscula, como por ejemplo: esVisible o radioEsfera.
El signo de subrayado se acepta en cualquier identificador pero por convencin slo se emplea para separar palabras en identificador es en constantes (po r convencin las constantes se escriben completamente en maysculas y esto dificulta la separacin de los nombres). Por ejemplo, para un valor constante que almacena un valor numrico que representa el nmero mximo de alumnos con los que trabaja el programa se podra declarar el identificador de la constante NUMERO_MAXIMO_ALUMNOS.
Aunque la definicin exacta de la identacin (espacios vs tabuladores) no se especifica en el lenguaje Java, se recomienda emplear una secuencia de cuatro espacios como unidad de identacin.
Por otro lado se recomienda evitar las lneas de ms de 80 caracteres en el cdigo fuente ya que no se manejan correctamente por muchos terminales y herramientas de edicin.
Tema 2. Arreglos:
Los arreglos se pueden definir como objetos en los que podemos guardar mas de una variable, es decir, al tener un nico arreglo, este puede guardar mltiples variables de acuerdo a su tamao o capacidad, es importante recordar que las variables guardadas deben ser del mismo tipo, por ejemplo: Si tenemos un arreglo de tipo Numrico que puede almacenar 10 variables, solo podr almacenar 10 nmeros diferentes, no otras variables como caracteres o Strings.
Existen 2 tipos de arreglos, los unidimensionales, y los multidimensionales(generalmente 2 dimensiones y se les denomina matrices), en esta leccin veremos cmo declarar y utilizar los arreglos unidimensionales, estos son ms sencillos y fciles de comprender, y pueden servirnos para muchas aplicaciones.
Declaracin:
16
ejemplos: String array[]; //donde array es un arreglo que guardara variables tipo Strings double array2[]; //donde array2 es un arreglo que guardara variabels tipo double int [] array3; //donde array3 es un arreglo que guardara variables tipo int(numericas)
Definir tamao de arreglos: Para asignar a un arreglo su tamao o capacidad, se hace de la siguiente forma:
ejemplo: array = new String[10]; //el arreglo array guardara hasta un maximo de 10 variables de tipo String
Para realizar una declaracin de un arreglo y definir su tamao en una misma linea se puede usar la siguiente estructura:
String array[] = new String[10]; //se declara un arreglo y se asigna su tamao en una misma linea
17
18
arreglo[indicador]=valor;
ejemplos:
array[0] = "Ejemplo"; //aqui se asigna el valor "Ejemplo" a un arreglo de String en su primera posicion array2[3] = 5; //se asigna un valor de 5 al 4to elemento de un arreglo numerico;
Es importante recordar que para accesar a los datos guardados en un arreglo se utilizan indicadores iniciando desde el "0", si un arreglo tiene un tamao de 10 variables, entonces se puede accesar a sus elementos con los indicadores del 0 al 9.
array[0] =2;
array[1] = 10;
19
arra[2] = 7;
20