Sunteți pe pagina 1din 40

http://www.webtaller.com/manual-java/programacion.

php

MANUAL DE JAVA
PROGRAMACION Cuando se programa en Java, se coloca todo el cdigo en mtodos, de la misma forma que se escriben funciones en lenguajes como C. Comentarios En Java hay tres tipos de comentarios:
// comentarios para una sola lnea /* comentarios de una o ms lneas */ /** comentario de documentacin, de una o ms lneas */

Los dos primeros tipos de comentarios son los que todo programador conoce y se utilizan del mismo modo. Los comentarios de documentacin, colocados inmediatamente antes de una declaracin (de variable o funcin), indican que ese comentario ha de ser colocado en la documentacin que se genera automticamente cuando se utiliza la herramienta de Java, javadoc. Dichos comentarios sirven como descripcin del elemento declarado permitiendo generar una documentacin de nuestras clases escrita al mismo tiempo que se genera el cdigo. En este tipo de comentario para documentacin, se permite la introduccin de algunos tokens o palabras clave, que harn que la informacin que les sigue aparezca de forma diferente al resto en la documentacin.

Identificadores Los identificadores nombran variables, funciones, clases y objetos; cualquier cosa que el programador necesite identificar o usar. En Java, un identificador comienza con una letra, un subrayado (_) o un smbolo de dlar ($). Los siguientes caracteres pueden ser letras o dgitos. Se distinguen las maysculas de las minsculas y no hay longitud mxima. Seran identificadores vlidos:
identificad or nombre_usuario Nombre_Usuario _variable_del_sistema $transaccion

y su uso sera, por ejemplo:


int contador_principal;

http://www.webtaller.com/manual-java/programacion.php
char _lista_de_ficheros; float $cantidad_en_Ptas;

Palabras clave Las siguientes son las palabras clave que estn definidas en Java y que no se pueden utilizar como indentificadores:
abstract boolean break byte byvalue case catch char class const continue default do double else extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static super switch synchronized this threadsafe throw transient true try void while

Palabras Reservadas Adems, el lenguaje se reserva unas cuantas palabras ms, pero que hasta ahora no tienen un cometido especfico. Son:
cast operator future outer generic rest inner var

Literales Un valor constante en Java se crea utilizando una representacin literal de l. Java utiliza cinco tipos de elementos: enteros, reales en coma flotante, booleanos, caracteres y cadenas, que se pueden poner en cualquier lugar del cdigo fuente de Java. Cada uno de estos literales tiene un tipo correspondiente asociado con l. Enteros:
byte short int long Por ejemplo: 8 bits 16 bits 32 bits 64 bits 21 077 complemento complemento complemento complemento 0xDC00 a do s a dos a dos a dos

Reales en coma flotante:


float double Por ejemplo: 32 bits 64 bits 3.14 2e12 IEEE 754 IEEE 754 3.1E12

Booleanos:
true false

Caracteres:
Por ejemplo: unicode a t u???? [????] es un nmero

http://www.webtaller.com/manual-java/programacion.php

Cadenas: Por ejemplo: "Esto es una cadena literal" Arrays Se pueden declarar en Java arrays de cualquier tipo:
char s[]; int iArray[];

Incluso se pueden construir arrays de arrays:


int tabla[][] = new int[4][5];

Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar desbordamientos y la corrupcin de memoria. En Java un array es realmente un objeto, porque tiene redefinido el operador []. Tiene una funcin miembro: length. Se puede utilizar este mtodo para conocer la longitud de cualquier array.
int a[][] = new int[10][3]; a.length; /* 10 */ a[0].length; /* 3 */

Para crear un array en Java hay dos mtodos bsicos. Crear un array vaco:
int lista[] = new int[50];

o se puede crear ya el array con sus valores iniciales:


String nombres[] = { "Juan","Pepe","Pedro","Maria" };

Esto que es equivalente a:


String nombres[]; nombres = new String[4]; nombres[0] = new String( nombres[1] = new String( nombres[2] = new String( nombres[3] = new String(

"Juan" ); "Pepe" ); "Pedro" ); "Maria" );

No se pueden crear arrays estticos en tiempo de compilacin:


int lista[50]; // generar un error en tiempo de compilacin

Tampoco se puede rellenar un array sin declarar el tamao con el operador new:
int lista[]; for( int i=0; i < 9; i++ ) lista[i] = i;

http://www.webtaller.com/manual-java/programacion.php

Es decir, todos los arrays en Java son estticos. Para convertir un array en el equivalente a un array dinmico en C/C++, se usa la clase vector, que permite operaciones de insercin, borrado, etc. en el array.

Operadores Los operadores de Java son muy parecidos en estilo y funcionamiento a los de C. En la siguiente tabla aparecen los operadores que se utilizan en Java, por orden de precedencia:
. ++ ! * + << < & && ? : = [] -~ / >> > ^ || op= () instanceof % >>> <= | (*= >= == !=

/=

%=

+=

-=

etc.)

Los operadores numricos se comportan como esperamos:


int + int = int

Los operadores relacionales devuelven un valor booleano. Para las cadenas, se pueden utilizar los operadores relacionales para comparaciones adems de + y += para la concatenacin:
String nombre = "nombre" + "Apellido";

El operador = siempre hace copias de objetos, marcando los antiguos para borrarlos, y ya se encargar el garbage collector de devolver al sistema la memoria ocupada por el objeto eliminado. Separadores Slo hay un par de secuencias con otros caracteres que pueden aparecer en el cdigo Java; son los separadores simples, que van a definir la forma y funcin del cdigo. Los separadores admitidos en Java son: () - parntesis. Para contener listas de parmetros en la definicin y llamada a mtodos. Tambin se utiliza para definir precedencia en expresiones, contener expresiones para control de flujo y rodear las conversiones de tipo. {} - llaves. Para contener los valores de matrices inicializadas automticamente. Tambin se utiliza para definir un bloque de cdigo, para clases, mtodos y mbitos locales.

http://www.webtaller.com/manual-java/programacion.php

[] - corchetes. Para declarar tipos matriz. Tambin se utiliza cuando se referencian valores de matriz. ; - punto y coma. Separa sentencias. , - coma. Separa identificadores consecutivos en una declaracin de variables. Tambin se utiliza para encadenar sentencias dentro de una sentencia for. . - punto. Para separar nombres de paquete de subpaquetes y clases. Tambin se utiliza para separar una variable o mtodo de una variable de referencia.

MANUAL DE JAVA
CONTROL DE FLUJO Muchas de las sentencias de control del flujo del programa se han tomado del C: Sentencias de Salto if/else
if( Boolean ) { sentencias; } else { sentencias; }

switch
switch( expr1 ) { case expr2: sentencias; break; case expr3: sentencias; break; default: sentencias; break; }

Sentencias de Bucle Bucles for


for( expr1 inicio; expr2 test; expr3 incremento ) { sentencias; }

http://www.webtaller.com/manual-java/programacion.php

El siguiente trocito de cdigo Java que dibuja varias lneas en pantalla alternando sus colores entre rojo, azul y verde. Este fragmento sera parte de una funcin Java (mtodo):
int contador; for( contador=1; contador <= 12; contador++ ) { switch( contador % 3 ) { case 0: setColor( Color.red ); break; case 1: setColor( Color.blue ); break; case 2: setColor( Color.green ); break; } g.drawLine( 10,contador*10,80,contador*10 ); }

Tambin se soporta el operador coma (,) en los bucles for


for( a=0,b=0; a < 7; a++,b+=2 )

Bucles while
while( Boolean ) { sentencias; }

Bucles do/while
do { sentencias; }while( Boolean );

Excepciones try-catch-throw
try { sentencias; } catch( Exception ) { sentencias; }

Java implementa excepciones para facilitar la construccin de cdigo robusto. Cuando ocurre un error en un programa, el cdigo que encuentra el error lanza una excepcin, que se puede capturar y recuperarse de ella. Java proporciona muchas excepciones predefinidas. Control General del Flujo
break [etiqueta]

http://www.webtaller.com/manual-java/programacion.php
continue [etiqueta] return expr; etiqueta: sentencia;

En caso de que nos encontremos con bucles anidados, se permite el uso de etiquetas para poder salirse de ellos, por ejemplo:
uno: for( ) { dos: for( ) { continue; continue uno; break uno; } }

// seguira en el bucle interno // seguira en el bucle princip al // se saldra del bucle principal

En el cdigo de una funcin siempre hay que ser consecuentes con la declaracin que se haya hecho de ella. Por ejemplo, si se declara una funcin para que devuelva un entero, es imprescindible que se coloque un return final para salir de esa funcin, independientemente de que haya otros en medio del cdigo que tambin provoquen la salida de la funcin. En caso de no hacerlo se generar un Warning, y el cdigo Java no se puede compilar con Warnings.
int func() { if( a == 0 ) return 1; return 0; // es imprescindible porque se retorna un entero }

MANUAL DE JAVA
CLASES Las clases son lo ms simple de Java. Todo en Java forma parte de una clase, es una clase o describe como funciona una clase. El conocimiento de las clases es fundamental para poder entender los programas Java. Todas las acciones de los programas Java se colocan dentro del bloque de una clase o un objeto. Todos los mtodos se definen dentro del bloque de la clase, Java no soporta funciones o variables globales. Esto puede despistar a los programadores de C++, que pueden definir mtodos fuera del bloque de la clase, pero esta posibilidad es ms un intento de no separarse mucho y ser compatible con C, que un buen diseo orientado a objetos. As pues, el esqueleto de cualquier aplicacin Java se basa en la definicin de una clase. Todos los datos bsicos, como los enteros, se deben declarar en las clases antes de hacer uso de ellos. En C la unidad fundamental son los ficheros con cdigo fuente, en Java son las clases. De hecho son pocas las sentencias que se pueden colocar fuera del bloque de una clase. La palabra clave import (equivalente al #include) puede colocarse al principio de un fichero, fuera del bloque de la clase. Sin embargo, el compilador

http://www.webtaller.com/manual-java/programacion.php

reemplazar esa sentencia con el contenido del fichero que se indique, que consistir, como es de suponer, en ms clases. Tipos de Clases Hasta ahora slo se ha utilizado la palabra clave public para calificar el nombre de las clases que hemos visto, pero hay tres modificadores ms. Los tipos de clases que podemos definir son: abstract Una clase abstract tiene al menos un mtodo abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia. final Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final. public Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas. synchronizable Este modificador especifica que todos los mtodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban.

MANUAL DE JAVA
VARIABLES Y METODOS DE INSTANCIA Una clase en Java puede contener variables y mtodos. Las variables pueden ser tipos primitivos como int, char, etc. Los mtodos son funciones. Por ejemplo, en el siguiente trozo de cdigo podemos observarlo:
public MiClase { int i; public MiClase() { i = 10; } public void Suma_a_i( int j ) { i = i + j; } }

http://www.webtaller.com/manual-java/programacion.php

La clase MiClase contiene una variable (i) y dos mtodos, MiClase que es el constructor de la clase y Suma_a_i( int j ). Ambito de una variable Los bloques de sentencias compuestas en Java se delimitan con dos llaves. Las variables de Java slo son vlidas desde el punto donde estn declaradas hasta el final de la sentencia compuesta que la engloba. Se pueden anidar estas sentencias compuestas, y cada una puede contener su propio conjunto de declaraciones de variables locales. Sin embargo, no se puede declarar una variable con el mismo nombre que una de mbito exterior. El siguiente ejemplo intenta declarar dos variables separadas con el mismo nombre. En C y C++ son distintas, porque estn declaradas dentro de mbitos diferentes. En Java, esto es ilegal.
Class Ambito { int i = 1; { int i = 2; } } // mbito exterior // crea un nuevo mbito // error de compilacin

Mtodos y Constructores Los mtodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. El constructor es un tipo especfico de mtodo que siempre tiene el mismo nombre que la clase. Cuando se declara una clase en Java, se pueden declarar uno o ms constructores opcionales que realizan la inicializacin cuando se instancia (se crea una ocurrencia) un objeto de dicha clase. Utilizando el cdigo de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean (instancian) todos los mtodos y variables, y se llama al constructor de la clase:
MiClase mc; mc = new MiClase();

La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no consume memoria, simplemente es una declaracin de tipo. Despus de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc ser igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto:
mc.i++; // incrementa la instancia de i de mc

Al tener mc todas las variables y mtodos de MiClase, se puede usar la primera sintaxis para llamar al mtodo Suma_a_i() utilizando el nuevo nombre de clase mc:
mc.Suma_a_i( 10 );

y ahora la variable mc.i vale 21.

http://www.webtaller.com/manual-java/programacion.php

Finalizadores Java no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger automticamente todos los objetos que se salen del alcance. No obstante proporciona un mtodo que, cuando se especifique en el cdigo de la clase, el reciclador de memoria (garbage collector) llamar:
// Cierra el canal cuando este objeto es reciclado protected void finalize() { close(); }

MANUAL DE JAVA
ALCANCE DE OBJETOS Y RECICLADO DE MEMORIA Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no se va a utilizar ms, debera liberar el espacio que ocupaba en la memoria de forma que las aplicaciones no la agoten (especialmente las grandes). En Java, la recoleccin y liberacin de memoria es responsabilidad de un thread llamado automatic garbage collector (recolector automtico de basura). Este thread monitoriza el alcance de los objetos y marca los objetos que se han salido de alcance. Veamos un ejemplo:
String s; s = new String( "abc" ); s = "def"; // no se ha asignado todavia // memoria asignada // se ha asignado nueva memoria // (nuevo objeto)

Ms adelante veremos en detalle la clase String , pero una breve descripcin de lo que hace esto es; crear un objeto String y rellenarlo con los caracteres "abc" y crear otro (nuevo) String y colocarle los caracteres "def". En esencia se crean dos objetos:
Objeto String "abc" Objeto String "def"

Al final de la tercera sentencia, el primer objeto creado de nombre s que contiene "abc" se ha salido de alcance. No hay forma de acceder a l. Ahora se tiene un nuevo objeto llamado s y contiene "def". Es marcado y eliminado en la siguiente iteracin del thread reciclador de memoria.

http://www.webtaller.com/manual-java/programacion.php

MANUAL DE JAVA
HERENCIA La Herencia es el mecanismo por el que se crean nuevos objetos definidos en trminos de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Pato, que es una especializacin de Ave.
class Pato extends Ave { int numero_de_patas; }

La palabra clave extends se usa para generar una subclase (especializacin) de un objeto. Una Pato es una subclase de Ave. Cualquier cosa que contenga la definicin de Ave ser copiada a la clase Pato, adems, en Pato se pueden definir sus propios mtodos y variables de instancia. Se dice que Pato deriva o hereda de Ave. Adems, se pueden sustituir los mtodos proporcionados por la clase base. Utilizando nuestro anterior ejemplo de MiClase, aqu hay un ejemplo de una clase derivada sustituyendo a la funcin Suma_a_i() :
import MiClase; public class MiNuevaClase extends MiClase { public void Suma_a_i( int j ) { i = i + ( j/2 ); } }

Ahora cuando se crea una instancia de MiNuevaClase, el valor de i tambin se inicializa a 10, pero la llamada al mtodo Suma_a_i() produce un resultado diferente:
MiNuevaClase mnc; mnc = new MiNuevaClase(); mnc.Suma_a_i( 10 );

En Java no se puede hacer herencia mltiple. Por ejemplo, de la clase aparato con motor y de la clase animal no se puede derivar nada, sera como obtener el objeto toro mecnico a partir de una mquina motorizada (aparato con motor) y un toro (aminal). En realidad, lo que se pretende es copiar los mtodos, es decir, pasar la funcionalidad del toro de verdad al toro mecnico, con lo cual no sera necesaria la herencia mltiple sino simplemente la comparticin de funcionalidad que se encuentra implementada en Java a travs de interfaces .

MANUAL DE JAVA
CONTROL DE ACCESO

Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los mtodos definidos en la clase:

http://www.webtaller.com/manual-java/programacion.php

public
public void CualquieraPuedeAcceder(){}

Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia pblicos. protected
protected void SoloSubClases(){}

Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de instancia protegidos. private
private String NumeroDelCarnetDeIdentidad;

Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la clase. No son accesibles desde las subclases. friendly (sin declaracin especfica)
void MetodoDeMiPaquete(){}

Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia se declaran friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al paquete. Es lo mismo que protected. Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas, como en C++, y tambin, en Java, por los paquetes (packages). Todas las clases de un paquete pueden ver los mtodos protegidos de ese paquete. Para evitarlo, se deben declarar como private protected , lo que hace que ya funcione como en C++ en donde slo se puede acceder a las variables y mtodos protegidos de las clases derivadas.

MANUAL DE JAVA
VARIABLES Y METODOS ESTATICOS En un momento determinado se puede querer crear una clase en la que el valor de una variable de instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partir de esa clase. Es decir, que exista una nica copia de la variable de instancia. Se usar para ello la palabra clave static .
class Documento extends Pagina { static int version = 10; }

El valor de la variable version ser el mismo para cualquier objeto instanciado de la clase Documento . Siempre que un objeto instanciado de Documento cambie la variable version , sta cambiar para todos los objetos.

http://www.webtaller.com/manual-java/programacion.php

De la misma forma se puede declarar un mtodo como esttico, lo que evita que el mtodo pueda acceder a las variables de instancia no estticas:
class Documento extends Pagina { static int version = 10; int numero_de_capitulos; static void annade_un_capitulo() { numero_de_capitulos++; // esto no funciona } static void modific a_version( int i ) { version++; // esto si funciona } }

La modificacin de la variable numero_de_capitulos no funciona porque se est violando una de las reglas de acceso al intentar acceder desde un mtodo esttico a una variable no esttica. Todas las clases que se derivan, cuando se declaran estticas, comparten la misma pgina de variables; es decir, todos los objetos que se generen comparten la misma zona de memoria. Las funciones estticas se usan para acceder solamente a variables estticas.
class UnaClase { int var; UnaClase() { var = 5; } UnaFuncion() { var += 5; } }

En el cdigo anterior, si se llama a la funcin UnaFuncion a travs de un puntero a funcin, no se podra acceder a var , porque al utilizar un puntero a funcin no se pasa implcitamente el puntero al propio objeto ( this ). Sin embargo, s se podra acceder a var si fuese esttica, porque siempre estara en la misma posicin de memoria para todos los objetos que se creasen de UnaClase.

MANUAL DE JAVA
THIS Y SUPER Al acceder a variables de instancia de una clase, la palabra clave this hace referencia a los miembros de la propia clase. Volviendo al ejemplo de MiClase, se puede aadir otro constructor de la forma siguiente:
public class MiClase { int i; public MiClase() { i = 10; }

http://www.webtaller.com/manual-java/programacion.php
// Este constructor establece el valor de i public MiClase( int valor ) { this.i = valor; // i = valor } public void Suma_a_i( int j ) { i = i + j; } }

Aqu this.i se refiere al entero i en la clase MiClase . Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se puede hacer referencia al mtodo padre con la palabra clave super :
import MiClase; public class MiNuevaClase extends Mi Clase { public void Suma_a_i( int j ) { i = i + ( j/2 ); super.Suma_a_i( j ); } }

En el siguiente cdigo, el constructor establecer el valor de i a 10, despus lo cambiar a 15 y finalmente el mtodo Suma_a_i() de la clase padre (MiClase) lo dejar en 25: MiNuevaClase mnc; mnc = new MiNuevaClase(); mnc.Suma_a_i( 10 );

MANUAL DE JAVA
CLASES ABSTRACTAS Una de las caractersticas ms tiles de cualquier lenguaje orientado a objetos es la posibilidad de declarar clases que definen como se utiliza solamente, sin tener que implementar mtodos. Esto es muy til cuando la implementacin es especfica para cada usuario, pero todos los usuarios tienen que utilizar los mismos mtodos. Un ejemplo de clase abstracta en Java es la clase Graphics :
public abstract class Graphics { public abstract void drawLine( int x1,int y1,int x2, int y2 ); public abstract void drawOval( int x,int y,int width, int height ); public abstract void drawArc( int x,int y,int width, int height,int startAngle,int arcAngle ); . . . }

Los mtodos se declaran en la clase Graphics , pero el cdigo que ejecutar el mtodo est en algn otro sitio:
public class MiClase extends Graphics { public void drawLine( int x1,int y1,int x2,int y2 ) { <cdigo para pintar lneas -especfico de la arquitectura ->

http://www.webtaller.com/manual-java/programacion.php
} }

Cuando una clase contiene un mtodo abstracto tiene que declararse abstracta. No obstante, no todos los mtodos de una clase abstracta tienen que ser abstractos. Las clases abstractas no pueden tener mtodos privados (no se podran implementar) ni tampoco estticos. Una clase abstracta tiene que derivarse obligatoriamente, no se puede hacer un new de una clase abstracta. Una clase abstracta en Java es lo mismo que en C++ virtual func() = 0; lo que obliga a que al derivar de la clase haya que implementar forzosamente los mtodos de esa clase abstracta.

MANUAL DE JAVA
INTERFACES Los mtodos abstractos son tiles cuando se quiere que cada implementacin de la clase parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los mtodos abstractos. Los interfaces proporcionan un mecanismo para abstraer los mtodos a un nivel superior. Un interface contiene una coleccin de mtodos que se implementan en otro lugar. Los mtodos de una clase son public , static y final . La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de encapsulacin de los protocolos de los mtodos sin forzar al usuario a utilizar la herencia. Por ejemplo:
public interface VideoClip { // comienza la reproduccion del video void play(); // reproduce el clip en u n bucle void bucle(); // detiene la reproduccion void stop(); }

Las clases que quieran utilizar el interface VideoClip utilizarn la palabra implements y proporcionarn el cdigo necesario para implementar los mtodos que se han definido para el interface:
class MiClase implements VideoClip { void play() { <cdigo> } void bucle() { <cdigo>

http://www.webtaller.com/manual-java/programacion.php
} void stop() { <cdigo> }

Al utilizar implements para el interface es como si se hiciese una accin de copiar-ypegar del cdigo del interface, con lo cual no se hereda nada, solamente se pueden usar los mtodos. La ventaja principal del uso de interfaces es que una clase interface puede ser implementada por cualquier nmero de clases, permitiendo a cada clase compartir el interfaz de programacin sin tener que ser consciente de la implementacin que hagan las otras clases que implementen el interface .
class MiOtraClase implements VideoClip { void play() { <cdigo nuevo > } void bucle() { <cdigo nuevo > } void stop() { <cdigo nuevo > }

MANUAL DE JAVA
METODOS NATIVOS Java proporciona un mecanismo para la llamada a funciones C y C++ desde nuestro cdigo fuente Java. Para definir mtodos como funciones C o C++ se utiliza la palabra clave native .
public class Fecha { int ahora; public Fecha() { ahora = time(); } private native int time(); static { System.loadLibrary( "time" ); } }

Una vez escrito el cdigo Java, se necesitan ejecutar los pasos siguientes para poder integrar el cdigo C o C++:
y y y

Utilizar javah para crear un fichero de cabecera (.h) Utilizar javah para crear un fichero de stubs , es decir, que contiene la declaracin de las funciones Escribir el cdigo del mtodo nativo en C o C++, es decir, rellenar el cdigo de la funcin, completando el trabajo de javah al crear el fichero de stubs

http://www.webtaller.com/manual-java/programacion.php

y y

Compilar el fichero de stubs y el fichero .c en una librera de carga dinmica ( DLL en Windows '95 o libXX.so en Unix) Ejecutar la aplicacin con el appletviewer

Ms adelante trataremos en profundidad los mtodos nativos, porque aaden una gran potencia a Java, al permitirle integrar a travs de librera dinmica cualquier algoritmo desarrollado en C o C++, lo cual, entre otras cosas, se utiliza como mtodo de proteccin contra la descompilacin completa del cdigo Java.

MANUAL DE JAVA
PAQUETES La palabra clave package permite agrupar clases e interfaces. Los nombres de los paquetes son palabras separadas por puntos y se almacenan en directorios que coinciden con esos nombres. Por ejemplo, los ficheros siguientes, que contienen cdigo fuente Java: Applet.java, AppletContext.java, AppletStub.java, AudioClip.java contienen en su cdigo la lnea: package java.applet; Y las clases que se obtienen de la compilacin de los ficheros anteriores, se encuentran con el nombre nombre_de_clase.class, en el directorio: java/applet Import Los paquetes de clases se cargan con la palabra clave import, especificando el nombre del paquete como ruta y nombre de clase (es lo mismo que #include de C/C++). Se pueden cargar varias clases utilizando un asterisco. import java.Date; import java.awt.*; Si un fichero fuente Java no contiene ningn package, se coloca en el paquete por defecto sin nombre. Es decir, en el mismo directorio que el fichero fuente, y la clase puede ser cargada con la sentencia import: import MiClase; Paquetes de Java El lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un sistema de entrada/salida general, herramientas y comunicaciones. En la versin actual del JDK, los paquetes Java que se incluyen son:

http://www.webtaller.com/manual-java/programacion.php

java.applet Este paquete contiene clases diseadas para usar con applets. Hay una clase Applet y tres interfaces: AppletContext, AppletStub y AudioClip. java.awt El paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y componentes GUI (Interfaz Grfico de Usuario). Incluye las clases Button, Checkbox, Choice, Component, Graphics, Menu, Panel, TextArea y TextField. java.io El paquete de entrada/salida contiene las clases de acceso a ficheros: FileInputStream y FileOutputStream. java.lang Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception, System, Integer, Float, Math, String, etc. java.net Este paquete da soporte a las conexiones del protocolo TCP/IP y, adems, incluye las clases Socket, URL y URLConnection. java.util

Este paquete es una miscelnea de clases tiles para muchas cosas en programacin. Se incluyen, entre otras, Date (fecha), Dictionary (diccionario), Random (nmeros aleatorios) y Stack (pila FIFO).

MANUAL DE JAVA
REFERENCIAS Las referencias en Java no son punteros ni referencias como en C++. Este hecho crea un poco de confusin entre los programadores que llegan por primera vez a Java. Las referencias en Java son identificadores de instancias de las clases Java. Una referencia dirige la atencin a un objeto de un tipo especfico. No tenemos por qu saber cmo lo hace ni necesitamos saber qu hace ni, por supuesto, su implementacin. Pensemos en una referencia como si se tratase de la llave electrnica de la habitacin de un hotel. Vamos a utilizar precisamente este ejemplo del Hotel para demostrar el uso y la utilizacin que podemos hacer de las referencias en Java. Primero crearemos la clase Habitacion , implementada en el fichero Habitacion.java , mediante instancias de la cual construiremos nuestro Hotel:

http://www.webtaller.com/manual-java/programacion.php
public class Habitacion { private int numHabitacion; private int numCamas; public Habitacion() { habitacion( 0 ); } public Habitacion( int numeroHab ) { habitacion( numeroHab ); } public Habitacion( int numeroHab,int camas ) { habitacion( numeroHab ); camas( camas ); } public synchornized int habitacion() { return( numHabitacion ); } public synchronized void habitacion( int numeroHab ) { numHabitacion = numeroHab; } public synchronized int camas() { return( camas ); } public syncronized void camas( int camas ) { numCamas = camas; } }

El cdigo anterior sera el corazn de la aplicacin. Vamos pues a construir nuestro Hotel creando Habitaciones y asignndole a cada una de ellas su llave electrnica; tal como muestra el cdigo siguiente, Hotel1.java :
public class Hotel1 { public static void main( String args[] ) { Habitacion llaveHab1; Habitacion llaveHab2; llaveHab1 = new Habitacion( 222 ); 5 // // } llaveHab2 = new Habitacion( 1144,3 ); ^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^ A B y D C }

// paso 1 // pasos 2, 3, 4 y

Para explicar el proceso, dividimos las acciones en los cinco pasos necesarios para poder entrar en nuestra habitacin. Aunque no se incluye, podemos tambin considerar el caso de que necesitemos un cerrajero, para que cuando perdamos la llave, nos abra la puerta; y que en nuestro caso sera el garbage collector , que recicla la habitacin una vez que se hayan perdido todas las llaves.

http://www.webtaller.com/manual-java/programacion.php

El primer paso es la creacin de la llave, es decir, definir la variable referencia, por defecto nula . El resto de los pasos se agrupan en una sola sentencia Java. La parte B en el cdigo anterior indica al gerente del Hotel que ya dispone de una nueva habitacin. La parte C llama al decorador de interiores para que " vista " la habitacin segn un patrn determinado, para que no desentonen unas habitaciones con otras y no se pierdan las seas de identidad del hotel. El cdigo electrnico que nos permitir acceder a la habitacin se genera en la parte D, una vez conocido el interior de la habitacin y se programa en la llave en la parte A. Si dejamos el ejemplo real a un lado y nos vamos a lo que ocurre en la ejecucin del cdigo, vemos que el operador new busca espacio para una instancia de un objeto de una clase determinada e inicializa la memoria a los valores adecuados. Luego invoca al mtodo constructor de la clase, proporcionndole los argumentos adecuados. El operador new devuelve una referencia a s mismo, que es inmediatamente asignada a la variable referencia. Podemos tener mltiples llaves para una misma habitacin: . . . Habitacion llaveHab3,llaveHab4; llaveHab3 = llaveHab1; llaveHab4 = llavehab2; De este modo conseguimos copias de las llaves. Las habitaciones en s mismas no se han tocado en este proceso. As que, ya tenemos dos llaves para la habitacin 222 y otras dos para la habitacin 1144. Una llave puede ser programada para que funcione solamente con una habitacin en cualquier momento, pero podemos cambiar su cdigo electrnico para que funcione con alguna otra habitacin; por ejemplo, para cambiar una habitacin anteriormente utilizada por un empedernido fumador por otra limpia de olores y con vistas al mar. Cambiemos pues la llave duplicada de la habitacin del fumador (la 222) por la habitacin con olor a sal marina, 1144: . . . llaveHab3 = llaveHab2; Ahora tenemos una llave para la habitacin 222 y tres para la habitacin 1144. Mantendremos una llave para cada habitacin en la conserjera, para poder utilizarla como llave maestra, en el caso de que alguien pierda su llave propia. Alguien con la llave de una habitacin puede hacer cambios en ella, y los compaeros que tengan llave de esa misma habitacin, no tendrn conocimiento de esos cambios hasta que vuelvan a entrar en la habitacin. Por ejemplo, vamos a quitar una de las camas de la habitacin, entrando en ella con la llave maestra: . . . llaveHab2.camas( 2 ); Ahora cuando los inquilinos entren en la habitacin podrn comprobar el cambio realizado: . . . llaveHab4.printData();

http://www.webtaller.com/manual-java/programacion.php

MANUAL DE JAVA
REFERENCIAS Y ARRAYS Como en C y C++, Java dispone de arrays de tipos primitivos o de clases. Los arrays en C y C++ son bsicamente un acompaante para los punteros. En Java, sin embargo, son ciudadanos de primera clase. Vamos a expandir nuestro hotel creando todo un ala de habitaciones, Hotel2.java . Crearemos un juego de llaves maestras y luego construiremos las habitaciones:
public class Hotel2 { // Nmero de habitaciones por ala public static final int habPorAla = 12; public static void main( String args[] ) { Habitacion llavesMaestras[]; // paso 1 llavesMaestras = new Habitacion[ habPorAla ]; // pasos 2 -5 ^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^ A B, C, D y E int numPiso = 1; for( int i=0; i < habPorAla; i++ ) // pasos 6 -9 llavesMaestras[ i ] = new Habitacion( numPiso * 100 + i, ( 0 == (i %2)) ? 2 : 1 ); for( int i=0; i < habPorAla; i++ ) // pasos 10 -11 llavesMaestras[i].printData(); } }

// //

Cada paso en el ejemplo es semejante al que ya vimos antes. El paso 1 especifica que el juego de llaves maestras es un grupo de llaves de habitaciones. Los pasos 2 a 5 son, en este caso, la parte principal. En lugar de crear una habitacin, el gerente ordena construir un grupo contiguo de habitaciones. El nmero de llaves se especifica entre corchetes y todas se crean en blanco. Los pasos 6 a 9 son idnticos a los pasos 2 a 5 del ejemplo anterior, excepto en que en este caso todas las llaves pasan a formar parte del juego maestro. Los nmeros de piso se dan en miles para que cuando se creen las habitaciones, todas tengan el mismo formato. Tambin todas las habitaciones de nmero par tienen una sola cama, mientras que las habitaciones impares tendrn dos camas. Los pasos 10 y 11 nos permiten obtener informacin de cada una de las habitaciones.

http://www.webtaller.com/manual-java/programacion.php

MANUAL DE JAVA
REFERENCIAS Y LISTAS Hay gente que piensa que como Java no dispone de punteros, resulta demasiado complejo construir listas enlazadas, rboles binarios y grafos. Vamos a demostrar que quien as piense est bastante equivocado. Retomemos el ejemplo de los arrays, y en vez de stos vamos a usar una lista doblemente enlazada. El paquete de la lista simple se compone de dos clases. Cada elemento de la lista es un NodoListaEnlazada , NodoListaEnlazada.java :
public class NodoListaEnlazada { private NodoListaEnlazada siguiente; private NodoListaEnlazada anterior; private Object datos; // . . . }

Cada NodoListaEnlazada contiene una referencia a su nodo precedente en la lista y una referencia al nodo que le sigue. Tambin contiene una referencia genrica a cualquier clase que se use para proporcionar acceso a los datos que el usuario proporcione. La lista enlazada, ListaEnlazada.java , contiene un nodo principio-fin y un contador para el nmero de nodos en la lista:
public class ListaEnlazada { public NodoListaEnlazada PrincipioFin; private int numNodos; // . . . }

El nodo especial PrincipioFin es sencillo, para simplificar el cdigo. El contador se usa para optimizar los casos ms habituales.
Revisemos pues el cdigo de nuestro Hotel, ahora Hotel3.java , que ser prcticamente el mismo que en el caso de los arrays:
public class Hotel3 { // Nmero de habitaciones por ala public static final int habPorAla = 12; public static void main( String args[] ) { ListaEnlazada llaveMaestra; llaveMaestra = new ListaEnlazada(); // paso 1 // pasos 2 5 -

int numPiso = 1; for( int i=0; i < habPorAla; i++ ) // pasos 6 9 llaveMaestra.insertAt( i, new Habitacion( numPiso * 100 + i, ( 0 == (i%2)) ? 2 : 1 ); for( int i=0; i < habPorAla; i++ ) / pasos 10-12 / ( (Habitacion)llaveMaestra.getAt(i) ).printData(); }

http://www.webtaller.com/manual-java/programacion.php

El paso 1 es la llave maestra de la lista. Est representada por una lista genrica; es decir, una lista de llaves que cumple la convencin que nosotros hemos establecido. Podramos acelerar el tiempo de compilacin metiendo la lista genrica ListaEnlazada dentro de una ListaEnlazadaHabitacion . Los pasos 2 a 5 son equivalentes a los del primer ejemplo. Construimos e inicializamos una nueva ListaEnlazada , que usaremos como juego de llaves maestras. Los pasos 6 a 9 son funcionalmente idnticos a los del ejemplo anterior con arrays, pero con diferente sintaxis. En Java, los arrays y el operador [] son internos del lenguaje. Como Java no soporta la sobrecarga de operadores por parte del usuario, tenemos que usarlo siempre en su forma normal. La ListaEnlazada proporciona el mtodo insertAt() que coge el ndice en la lista, donde el nuevo nodo ha de ser insertado, como primer argumento. El segundo argumento es el objeto que ser almacenado en la lista. Obsrvese que no es necesario colocar moldeo alguno para hacer algo a una clase descendiente que depende de uno de sus padres. Los pasos 10 a 12 provocan la misma salida que los pasos 10 y 11 del ejemplo con arrays. El paso 10 coge la llave del juego que se indica en el mtodo getAt() . En este momento, el sistema no sabe qu datos contiene la llave, porque el contenido de la habitacin es genrico. Pero nosotros s sabemos lo que hay en la lista, as que informamos al sistema haciendo un moldeado a la llave de la habitacin (este casting generar un chequeo en tiempo de ejecucin por el compilador, para asegurarse de que se trata de una Habitacion ). El paso 12 usa la llave para imprimir la informacin.

MANUAL DE JAVA
UNA MINIMA APLICACION

La aplicacin ms pequea posible es la que simplemente imprimir un mensaje en la pantalla. Tradicionalmente, el mensaje suele ser "Hola Mundo!". Esto es justamente lo que hace el siguiente fragmento de cdigo:
// // Aplicacin HolaMundo de ejemplo // class HolaMundoApp { public static void main( String args[] ) { System.out.println( "Hola Mundo!" ) ; } }

HolaMundo

Vamos ver en detalle la aplicacin anterior, lnea a lnea. Esas lneas de cdigo contienen los componenetes mnimos para imprimir Hola Mundo! en la pantalla.
// // Aplicacin HolaMundo de ejemplo

http://www.webtaller.com/manual-java/programacion.php
//

Estas tres primera lneas son comentarios. Hay tres tipos de comentarios en Java, // es un comentario orientado a lnea.
class HolaMundoApp {

Esta lnea declara la clase HolaMundoApp . El nombre de la clase especificado en el fichero fuente se utiliza para crear un fichero nombredeclase.class en el directorio en el que se compila la aplicacin. En nuestro caso, el compilador crear un fichero llamado HolaMundoApp.class.
public static void main( String args[] ) {

Esta lnea especifica un mtodo que el intrprete Java busca para ejecutar en primer lugar. Igual que en otros lenguajes, Java utiliza una palabra clave main para especificar la primera funcin a ejecutar. En este ejemplo tan simple no se pasan argumentos. public significa que el mtodo main puede ser llamado por cualquiera, incluyendo el intrprete Java. static es una palabra clave que le dice al compilador que main se refiere a la propia clase HolaMundoApp y no a ninguna instancia de la clase. De esta forma, si alguien intenta hacer otra instancia de la clase, el mtodo main no se instanciara. void indica que main no devuelve nada. Esto es importante ya que Java realiza una estricta comprobacin de tipos, incluyendo los tipos que se ha declarado que devuelven los mtodos. args[] es la declaracin de un array de Strings. Estos son los argumentos escritos tras el nombre de la clase en la lnea de comandos:
%java HolaMundoApp arg1 arg2 ... System.out.println( "Hola Mundo!" );

Esta es la funcionalidad de la aplicacin. Esta lnea muestra el uso de un nombre de clase y mtodo. Se usa el mtodo println() de la clase out que est en el paquete System . El mtodo println() toma una cadena como argumento y la escribe en el stream de salida estndar; en este caso, la ventana donde se lanza la aplicacin.
} }

Finalmente, se cierran las llaves que limitan el mtodo main() y la clase HolaMundoApp .

http://www.webtaller.com/manual-java/programacion.php

MANUAL DE JAVA
COMPILACION Y EJECUCION DE HOLA MUNDO Vamos a ver a continuacin como podemos ver el resultado de nuestra primera aplicacin Java en pantalla. Generaremos un fichero con el cdigo fuente de la aplicacin, lo compilaremos y utilizaremos el intrprete java para ejecutarlo. Ficheros Fuente Java Los ficheros fuente en Java terminan con la extensin " .java ". Crear un fichero utilizando cualquier editor de texto ascii que tenga como contenido el cdigo de las ocho lneas de nuestra mnima aplicacin, y salvarlo en un fichero con el nombre de HolaMundoApp.java . Para crear los ficheros con cdigo fuente Java no es necesario un procesador de textos, aunque puede utilizarse siempre que tenga salida a fichero de texto plano o ascii, sino que es suficiente con cualquier otro editor. Compilacin El compilador javac se encuentra en el directorio bin por debajo del directorio java , donde se haya instalado el JDK. Este directorio bin , si se han seguido las instrucciones de instalacin, debera formar parte de la variable de entorno PATH del sistema. Si no es as, tendra que revisar la Instalacin del JDK . El compilador de Java traslada el cdigo fuente Java a byte-codes, que son los componentes que entiende la Mquina Virtual Java que est incluida en los navegadores con soporte Java y en appletviewer. Una vez creado el fichero fuente HolaMundoApp.java, se puede compilar con la lnea siguiente: %javac HolaMundoApp.java Si no se han cometido errores al teclear ni se han tenido problemas con el path al fichero fuente ni al compilador, no debera aparecer mensaje alguno en la pantalla, y cuando vuelva a aparecer el prompt del sistema, se debera ver un fichero HolaMundoApp.class nuevo en el directorio donde se encuentra el fichero fuente. Si ha habido algn problema, en Problemas de compilacin al final de esta seccin, hemos intentado reproducir los que ms frecuentemente se suelen dar, se pueden consultar por si pueden aportar un poco de luz al error que haya aparecido. Ejecucin Para ejecutar la aplicacin HolaMundoApp, hemos de recurrir al intrprete java , que tambin se encuentra en el directorio bin , bajo el directorio java . Se ejecutar la aplicacin con la lnea: %java HolaMundoApp y debera aparecer en pantalla la respuesta de Java: %Hola Mundo!

http://www.webtaller.com/manual-java/programacion.php

El smbolo % representa al prompt del sistema, y lo utilizaremos para presentar las respuestas que nos ofrezca el sistema como resultado de la ejecucin de los comandos que se indiquen en pantalla o para indicar las lneas de comandos a introducir. Problemas de compilacin A continuacin presentamos una lista de los errores ms frecuentes que se presentan a la hora de compilar un fichero con cdigo fuente Java, nos basaremos en errores provocados sobre nuestra mnima aplicacin Java de la seccin anterior, pero podra generalizarse sin demasiados problemas. %javac: Command not found No se ha establecido correctamente la variable PATH del sistema para el compilador javac . El compilador javac se encuentra en el directorio bin , que cuelga del directorio java , que cuelga del directorio donde se haya instalado el JDK (Java Development Kit). %HolaMundoApp.java:3: Method printl(java.lang.String) not found in class java.io.PrintStream. System.out.printl( "HolaMundo!); ^ Error tipogrfico, el mtodo es println no printl. %In class HolaMundoApp: main must be public and static Error de ejecucin, se olvid colocar la palabra static en la declaracin del mtodo main de la aplicacin. %Cant find class HolaMundoApp Este es un error muy sutil. Generalmente significa que el nombre de la clase es distinto al del fichero que contiene el cdigo fuente, con lo cual el fichero nombre_fichero.class que se genera es diferente del que cabra esperar. Por ejemplo, si en nuestro fichero de cdigo fuente de nuestra aplicacin HolaMundoApp.java colocamos en vez de la declaracin actual de la clase HolaMundoApp , la lnea: class HolaMundoapp { se crear un fichero HolaMundoapp.class , que es diferente del HolaMundoApp.class , que es el nombre esperado de la clase; la diferencia se encuentra en la a minscula y mayscula.

MANUAL DE JAVA
UN APPLET BASICO Vamos a comenzar la creacin del cdigo fuente de un applet que satisfaga nuestras necesidades. Recordamos que Java utiliza la extensin .java para designar los ficheros fuente. HolaMundo A continuacin est el cdigo fuente del applet HolaMundo, que es la versin applet de la mnima aplicacin Java que antes habamos escrito. Guardar este cdigo en un fichero fuente Java como HolaMundo.java .
//

http://www.webtaller.com/manual-java/programacion.php
// Applet HolaMundo de ejemplo // import java.awt.Graphics; import java.applet.Applet; public class HolaMundo extends Applet { public void paint( Graphics g ) { g.drawString( "Hola Mundo!",25,25 ) ; } }

Componentes bsicos de un Applet El lenguaje Java implementa un modelo de Programacin Orientada a Objetos. Los objetos sirven de bloques centrales de construccin de los programas Java. De la misma forma que otros lenguajes de programacin, Java tiene variables de estado y mtodos. Veamos como se descompone un applet en sus piezas/objetos:
/* Seccin de importaciones */ public class NombreDelNuevoApplet extends Applet { /* Aqu se declaran las variables de estado (public y private) */ /* Los mtodos para la interaccin con los objetos se declaran y definen aqu */ public void MetodoUno( parmetros ) { /* Aqu viene para cada mtodo, el cdigo Java que desempea la tarea. Qu cdigo se use depende del applet */ } }

Para HolaMundo, se importan las dos clases que necesita. No hay variables de estado, y slo se tiene que definir un mtodo para que el applet tenga el comportamiento esperado. Clases incluidas El comando import carga otras clases dentro de nuestro cdigo fuente. El importar una clase desde un paquete de Java hace que esa clase importada est disponible para todo el cdigo incluido en el fichero fuente Java que la importa. Por ejemplo, en el applet HolaMundo se importa la clase java.awt.Graphics , y podremos llamar a los mtodos de esta clase desde cualquier mtodo de nuestro programa que se encuentre en el fichero HolaMundo.java . Esta clase define una rea grfica y mtodos para poder dibujar dentro de ella. La funcin paint() declara a g como un objeto de tipo Graphics ; luego, paint() usa el mtodo drawString() de la clase Graphics para generar su salida.

http://www.webtaller.com/manual-java/programacion.php

La clase Applet Se puede crear una nueva clase, en este caso HolaMundo , extendiendo la clase bsica de Java: Applet . De esta forma, se hereda todo lo necesario para crear un applet. Modificando determinados mtodos del applet, podemos lograr que lleve a cabo las funciones que deseamos.
import java.applet.Applet; . . . public class HolaMundo extends Applet {

Mtodos de Applet La parte del applet a modificar es el mtodo paint() . En la clase Applet , se llama al mtodo paint() cada vez que el mtodo arranca o necesita ser refrescado, pero no hace nada. En nuestro caso, lo que hacemos es:
public void paint( Graphics g ) { g.drawString( "Hola Mundo!",25,25 ); }

De acuerdo a las normas de sobrecarga, se ejecutar este ltimo paint() y no el paint() vaco de la clase Applet . Luego, aqu se ejecuta el mtodo drawString() , que le dice al applet cmo debe aparecer un texto en el rea de dibujo. Otros mtodos bsicos para dibujar son:
drawLine( int x1,int y1,int x2,int y2 ) drawRect( int x,int y,int ancho,int alto ) drawOval( int x,int y,int ancho,int alto )

Tanto para drawRect() como para drawOval() , las coordenadas ( x,y ) son la esquina superior izquierda del rectngulo (para drawOval, el valo es encajado en el rectngulo que lo circunscribe). Para saber como poner un Applet en una pgina web puedes mirar aqu

MANUAL DE JAVA
LA CLASE MATH La clase Math representa la librera matemtica de Java. Las funciones que contiene son las de todos los lenguajes, parece que se han metido en una clase solamente a propsito de agrupacin, por eso se encapsulan en Math, y lo mismo sucede con las dems clases que corresponden a objetos que tienen un tipo equivalente (Character, Float, etc.). El constructor de la clase es privado, por los que no se pueden crear instancias de la clase. Sin embargo, Math es public para que se pueda llamar desde cualquier sitio y static para que no haya que inicializarla. Funciones matemticas

http://www.webtaller.com/manual-java/programacion.php

Si se importa la clase, se tiene acceso al conjunto de funciones matemticas estndar: Math.abs( x ) para int, long, float y double Math.sin( double ) Math.cos( double ) Math.tan( double ) Math.asin( double ) Math.acos( double ) Math.atan( double ) Math.atan2( double,double ) Math.exp( double ) Math.log( double ) Math.sqrt( double ) Math.ceil( double ) Math.floor( double ) Math.rint( double ) Math.pow( a,b ) Math.round( x ) para double y float Math.random() devuelve un double Math.max( a,b ) para int, long, float y double Math.min( a,b ) para int, long, float y double Math.E para la base exponencial Math.PI para PI He aqu un ejemplo, Mates.java , de uso de algunas funciones de la clase Math:
class Mates { public static void main( String args[] ) { int x; double rand,y,z; float max; rand = Math.random(); x = Math.abs( -123 ); y = Math.round( 123.567 ); z = Math.pow( 2,4 ); max = Math.max( (float)1e10, (float)3e9 ); System.out.println( System.out.println( System.out.println( System.out.println( System.out.println( } } rand ); x ); y ); z ); max );

http://www.webtaller.com/manual-java/programacion.php

MANUAL DE JAVA
LA CLASE CHARACTER Al trabajar con caracteres se necesitan muchas funciones de comprobacin y traslacin. Estas funciones estn empleadas en la clase Character . De esta clase s que se pueden crear instancias, al contrario que sucede con la clase Math . Declaraciones La primera sentencia crear una variable carcter y la segunda un objeto Character:
char c; Character C;

Comprobaciones booleanas
Character.isLowerCase( c ) Character.isUpperCase( c ) Character.isDigit( c ) Character.isSpace( c )

En este caso, si tuvisemos un objeto Character C , no se podra hacer C.isLowerCase , porque no se ha hecho un new de Character. Estas funciones son estticas y no conocen al objeto, por eso hay que crearlo antes. Traslaciones de caracteres
char c2 = Character.toLowerCase( c ); char c2 = Character.toUpperCase( c );

Traslaciones de carcter/dgito
int i = Character.digit( c,base ); char c = Character.forDigit( i,base );

Mtodos de la clase Character


C = new Ch aracter( 'J' ); char c = C.charValue(); String s = C.toString();

http://www.webtaller.com/manual-java/programacion.php

MANUAL DE JAVA
LA CLASE FLOAT

Cada tipo numrico tiene su propia clase de objetos. As el tipo float tiene el objeto Float . De la misma forma que con la clase Character , se han codificado muchas funciones tiles dentro de los mtodos de la clase Float . Declaraciones La primera sentencia crear una variable float y la segunda un objeto Float:
float f; Float F;

Valores de Float
Float.POSITIVE_INFINITY Float.NEGATIVE_INFINITY Float.NaN Float.MAX_VALUE Float.MIN_VALUE

Conversiones de Clase/Cadena
String s = Float.toString( f ); f = Float.valueOf( "3.14" );

Comprobaciones
boolean b = Float.isNaN( f ); boolean b = Float.isInfinite( f );

La funcin isNaN() comprueba si f es un No-Nmero . Un ejemplo de no-nmero es raiz cuadrada de -2. Conversiones de Objetos
Float F = new Float( Float.PI ); String s = F.toString(); int i = F.intValue(); long l = F.longValue(); float F = F.floatValue(); double d = F.doubleValue();

Otros Mtodos
int i = boolean int i = float f F.hashCode(); b = F.equals( Object obj ); Float.floatToIntBits( f ); = Float.intBitsToFloat( i );

http://www.webtaller.com/manual-java/programacion.php

MANUAL DE JAVA
LA CLASE DOUBLE

Cada tipo numrico tiene su propia clase de objetos. As el tipo double tiene el objeto Double . De la misma forma que con la clase Character , se han codificado muchas funciones tiles dentro de los mtodos de la clase Double . Declaraciones La primera sentencia crear una variable double y la segunda un objeto Double:
double d; Double D;

Valores de Double
Double.POSITIVE_INFINITY Double.NEGATIVE_INFINITY Double.NaN Double.MAX_VALUE Double.MIN_VALUE

Mtodos de Double
D.isNaN(); Double.isNaN( d ); D.isInfinite(); Double.isInfinite( d ); boolean D.equals(); String D.toString(); int D.intValue(); long D.longValue(); float D.floatValue(); double D.doubleValue(); int i = D.hashCode(); Double V.valueOf( String s ); long l = Double.doubleToLongBits( d ); double d = Double.longBitsToDouble( l );

MANUAL DE JAVA
LA CLASE INTEGER Cada tipo numrico tiene su propia clase de objetos. As el tipo int tiene el objeto Integer . De la misma forma que con la clase Character , se han codificado muchas funciones tiles dentro de los mtodos de la clase Integer .

http://www.webtaller.com/manual-java/programacion.php

Declaraciones La primera sentencia crear una variable int y la segunda un objeto Integer:
Integer.MIN_VALUE; Integer.MAX_VALUE;

Valores de Integer
Integer.MIN_VALUE; Integer.MAX_VALUE;

Mtodos de Integer
String Integer.toString( int i,int base ); String Integer.toString( int i ); int I.parseInt( String s,int base ); int I.parseInt( String s ); Integer Integer.valueOf( String s,int base ); Integer Integer.valueOf( String s ); int I.intValue(); long I.longValue(); float I.floatValue(); double I.doubleValue(); String I.toString(); int I.hashCode(); boolean I.equals( Object obj );

MANUAL DE JAVA
LA CLASE LONG Cada tipo numrico tiene su propia clase de objetos. As el tipo long tiene el objeto Long . De la misma forma que con la clase Character , se han codificado muchas funciones tiles dentro de los mtodos de la clase Long . Declaraciones La primera sentencia crear una variable long y la segunda un objeto Long:
long l; Long L;

Valores de Long
Long.MIN_VALUE; Long.MAX_VALUE;

Mtodos de Long
String Long.toString( long l,int base ); String Long.toString( long l ); long L.parseLong( String s,int base );

http://www.webtaller.com/manual-java/programacion.php
long L.parseLong( String s ); Long Long.valueOf( String s,int base ); Long Long.valueOf( String s ); int L.intValue(); long L.longValue(); float L.floatValue(); double L.doubleValue(); String L.toString(); int L.hashCode(); boolean L.equals( Object o bj );

En los mtodos toString() , parseInt() y valueOf() que no se especifica la base sobre la que se trabaja, se asume que es base 10 .

MANUAL DE JAVA
LA CLASE BOOLEAN Los valores boolean tambin tienen su tipo asociado Boolean , aunque en este caso hay menos mtodos implementados que para el resto de las clases numricas. Declaraciones La primera sentencia crear una variable boolean y la segunda un objeto Boolean:
boolean b; Boolean B;

Valores de Boolean
Boolean.TRUE; Boolean.FALSE;

Mtodos de Boolean
boolean B.booleanValue(); String B.toString(); boolean B.equals( Object obj );

MANUAL DE JAVA
LA CLASE STRING Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y StringBuffer . Un objeto String representa una cadena alfanumrica de un valor constante que no puede ser cambiada despus de haber sido creada. Un objeto StringBuffer representa una cadena cuyo tamao puede variar.

http://www.webtaller.com/manual-java/programacion.php

Los Strings son objetos constantes y por lo tanto muy baratos para el sistema. La mayora de las funciones relacionadas con cadenas esperan valores String como argumentos y devuelven valores String. Hay que tener en cuenta que las funciones estticas no consumen memoria del objeto, con lo cual es ms conveniente usar Character que char. No obstante, char se usa, por ejemplo, para leer ficheros que estn escritos desde otro lenguaje. Existen muchos constructores para crear nuevas cadenas:
String(); String( String str ); String( char val[] ); String( char val[],int offset,int count ); String( byte val[],int hibyte ); String( byte val[],int hibyte,int offset,int count );

Tal como uno puede imaginarse, las cadenas pueden ser muy complejas, existiendo muchas funciones muy tiles para trabajar con ellas y, afortunadamente, la mayora estn codificadas en la clase String . Funciones Bsicas La primera devuelve la longitud de la cadena y la segunda devuelve el carcter que se encuentra en la posicin que se indica en indice :
int length(); char charAt( int indice );

Funciones de Comparacin de Strings


boolean equals( Object obj ); boolean equalsIgnoreCase( Object obj );

Lo mismo que equals() pero no tiene en cuenta maysculas o minsculas.


int compareTo( String str2 );

Devuelve un entero menor que cero si la cadena es lxicamente menor que str2 . Devuelve cero si las dos cadenas son lxicamente iguales y un entero mayor que cero si la cadena es lxicamente mayor que str2 . Funciones de Comparacin de Subcadenas
boolean regionMatch( int thisoffset,String s2,int s2offset,int len ); boolean regionMatch( boolean ignoreC ase,int thisoffset,String s2, int s2offset,int 1 );

Comprueba si una regin de esta cadena es igual a una regin de otra cadena.
boolean startsWith( String prefix ); boolean startsWith( String prefix,int offset );

http://www.webtaller.com/manual-java/programacion.php
boolean endsWith( String suffix );

Devuelve si esta cadena comienza o termina con un cierto prefijo o sufijo comenzando en un determinado desplazamiento.
int int int int int int int int indexOf( int ch ); indexOf( int ch,int fromindex ); lastIndexOf( int ch ) ; lastIndexOf( int ch,int fromindex ); indexOf( String str ); indexOf( String str,int fromindex ); lastIndexOf( String str ); lastIndexOf( String str,int fromindex );

Devuelve el primer/ltimo ndice de un carcter/cadena empezando la bsqueda a partir de un determinado desplazamiento.


String String String String String String String substring( int beginindex ); substring( int beginindex,int endindex ); concat( String str ); replace( char oldchar,char newchar ); toLowerCase(); toUpperCase(); trim();

Ajusta los espacios en blanco al comienzo y al final de la cadena.


void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin ); void getBytes( int srcBegin,int srcEnd,byte dst[],int dstBegin ); String toString(); char toCharArray(); int hashCode();

Funciones ValueOf La clase String posee numerosas funciones para transformar valores de otros tipos de datos a su representacin como cadena. Todas estas funciones tienen el nombre de valueOf , estando el mtodo sobrecargado para todos los tipos de datos bsicos. Veamos un ejemplo de su utilizacin:
String Uno = new String( "Hola Mundo" ); float f = 3.141592; String PI = Uno.valueOf( f ); String PI = String.valueOf( f ); // Mucho ms correcto

Funciones de Conversin
String String String String String String String String valueOf( valueOf( valueOf( valueOf( valueOf( valueOf( valueOf( valueOf( boolean b ); int i ); long l ); float f ); double d ); Object obj ); char data[] ); char data[],int offset,int count );

http://www.webtaller.com/manual-java/programacion.php

Usa arrays de caracteres para la cadena.


String copyValueOf( char data[] ); String copyValueOf( char data[],int offset,int count );

Crea un nuevo array equivalente para la cadena.

MANUAL DE JAVA
LA CLASE STRINGBUFFER Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y StringBuffer . Un objeto String representa una cadena alfanumrica de un valor constante que no puede ser cambiada despus de haber sido creada. Un objeto StringBuffer representa una cadena cuyo tamao puede variar. La clase StringBuffer dispone de muchos mtodos para modificar el contenido de los objetos StringBuffer. Si el contenido de una cadena va a ser modificado en un programa, habr que sacrificar el uso de objetos String en beneficio de StringBuffer, que aunque consumen ms recursos del sistema, permiten ese tipo de manipulaciones. Al estar la mayora de las caractersticas de los StringBuffers basadas en su tamao variable, se necesita un nuevo mtodo de creacin:
StringBuffer(); StringBuffer( int len ); StringBuffer( String str );

Se puede crear un StringBuffer vaco de cualquier longitud y tambin se puede utilizar un String como punto de partida para un StringBuffer.
StringBuffer Dos = new StringBuffer( 20 ); StringBuffer Uno = new StringBuffer( "Hola Mundo" );

Cambio de Tamao El cambio de tamao de un StringBuffer necesita varias funciones especficas para manipular el tamao de las cadenas:
int length(); char charAt( int index ); void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin ); String toString(); void setLength( int newlength ); void setCharAt( int index,char ch ); int capacity(); void ensureCapacity( int minimum ); void copyWhenShared();

Obervar que una de las funciones devuelve una cadena constante normal de tipo String. Este objeto se puede usar con cualquier funcin String, como por ejemplo, en las funciones de comparacin. Modificacin del Contenido

http://www.webtaller.com/manual-java/programacion.php

Para cambiar el contenido de un StringBuffer, se pueden utilizar dos mtodos: append() e insert() . En el ejemplo CadAppend.java , vemos el uso de estos dos mtodos:
class CadAppend { public static void main( String args[] ) { StringBuffer str = new StringBuffer( "Hola" ); str.append( " Mundo" ); System.out.println( str ); } }

En este otro ejemplo, CadInversa.java , mostramos un mtodo muy simple que le da la vuelta a una cadena:
class CadInversa { public static String cadenaInversa( String fuente ) int longitud = fuente.length(); {

StringBuffer destino = new StringBuffer( longitud ); for( int i=(longitud -1); i >= 0; i -- ) destino.append( fuente.charAt( i ) ); return( destino. toString() ); } public static void main( String args[] ) { System.out.println( cadenaInversa( "Hola Mundo" ) ); } }

Las funciones que cambian el tamao son pues:


StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer StringBuffer append( append( append( append( append( append( append( append( append( append( insert( insert( insert( insert( insert( insert( insert( insert( insert( Object obj ); String str ); char str[] ); char str[],int offset,int len ); boolean b ); int i ); long l ); float f ); double d ); char ch ); int offset,Object obj ); int offset,String str ); int offset,char str[] ); int offset,boolean b ); int offset,int i ); int offset,long l ); int offset,float f ); int of fset,double d ); int offset,char ch );

Operadores de Concatenacin Hay que recordar que los operadores " + " y " += " tambin se pueden aplicar a cadenas. Ambos realizan una concatenacin y estn implementados con objetos StringBuffer.

http://www.webtaller.com/manual-java/programacion.php

Por ejemplo, la sentencia:


String s = "Qu" + " tal ?";

es interpretada por el compilador como:


String s = new StringBuffer().append( "Qu" ).append( " tal ).toString(); ?"

y se marcara el StringBuffer para borrarlo ya que el contenido pasa al objeto String. Tambin, la sentencia:
s += " por ah!";

sera interpretada por el sistema como:


String s = new StringBuffer().append( s ).append( " por ah!" ).toString();

y volvera a marcar para borrar el nuevo StringBuffer.

MANUAL DE JAVA
USO DE CONVERSIONES Veamos un ejemplo de utilidad de estas funciones. En el applet Conversion.java , que se muestra en el cdigo que sigue, se usan estas funciones para producir una salida til en un programa, presentando las coordenadas en las que se ha hecho click con el botn del ratn.
public class Conversion extends Applet { int RatonX = 25; int RatonY = 25; String Status = "Haz click con el ratn"; public void paint( Graphics g ) { g.drawString( Status,RatonX,RatonY ); } public boolean mouseDown( Event evt,int x,int y ) { Integer X = new Integer( x ); Integer Y = new Integer( y ); RatonX = x; RatonY = y; Status = X.toString()+","+Y.toString(); repaint(); return true; } }

http://www.webtaller.com/manual-java/programacion.php

MANUAL DE JAVA
MANEJO DE EXCEPCIONES Vamos a mostrar como se utilizan las excepciones, reconvirtiendo nuestro applet de saludo a partir de la versin iterativa de HolaIte.java :
import java.awt.*; import java.applet.Applet; public class HolaIte extends Applet { private int i = 0; private String Saludos[] = { "Hola Mundo!", "HOLA Mundo!", "HOLA MUNDO!!" }; public void paint( Graphics g ) { g.drawString( Saludos[i],25,25 ); i++; } }

Normalmente, un programa termina con un mensaje de error cuando se lanza una excepcin. Sin embargo, Java tiene mecanismos para excepciones que permiten ver qu excepcin se ha producido e intentar recuperarse de ella. Vamos a reescribir el mtodo paint() de nuestra versin iterativa del saludo:
public void paint( Grap hics g ) { try { g.drawString( Saludos[i],25,25 ); } catch( ArrayIndexOutOfBoundsException e ) { g.drawString( "Saludos desbordado",25,25 ); } catch( Exception e ) { // Cualquier otra excepcin System.out.println( e.toString() ); } finally { System.out.println( "Esto se imprime siempre!" ); } i++; }

La palabra clave finally define un bloque de cdigo que se quiere que sea ejecutado siempre, de acuerdo a si se captur la excepcin o no. En el ejemplo anterior, la salida en la consola, con i=4 sera: Saludos desbordado Esto se imprime siempre!

S-ar putea să vă placă și