Está en la página 1de 135

Libreras de Java

LSCA Alma Delia Otero Escobar

Existen diferentes libreras en Java, entre las cuales se encuentran:


java.lang Coleccin de tipos bsicos siempre importados a cualquier unidad de compilacin. Aqu estn las declaraciones de objetos, clases, threads, excepciones, wrappers de los tipos de datos primitivos y otras clases fundamentales. java.io Archivos de stream y acceso aleatorio. Librera estndar de entrada y salida.

java.net Librera que apoya interfaces con telnet y URLs.


java.util Clases como diccionarios, tabla de hash, stack, tcnicas de codificacin y decodificacin, hora, fecha, etctera. java.awt Abstract Windowing Toolkit que proporciona una capa abstracta que permite llevar una aplicacin en Java de un sistema de ventanas a otro. Contiene clases para componentes bsicos de la interfaz, tales como eventos, colores, tipos de letra, botones, campos de texto, etc.

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: identificador nombre_usuario Nombre_Usuario _variable_del_sistema $transaccion y su uso sera, por ejemplo:

int contador_principal; char _lista_de_ficheros; float $cantidad_en_Ptas;

Literales

Un valor constante en Java se crea utilizando una representacin literal de l. Ejemplo:

100 98.6 X <<Esto

es una prueba>>

Comentarios

En java existen tres tipos de comentarios:


De

mltiples lneas /* */ De una lnea // De documentacin /** */

Separadores

( ) Lista de parmetros, precedencia { } Inicializacin de matrices, bloques [ ] Tipos de matrices y referencias ; Separa sentencias , separa o bien encadena sentencias . Separa nombres de paquetes y subpaquetes, variables y mtodos

Palabras clave

Las siguientes son las palabras clave que estn definidas en Java y que no se pueden utilizar como identificadores:

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 synchroniz ed 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

future

generic

inner

operator

outer

rest

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
Tipo Por ejemplo 8 bits complemento a dos 16 bits complemento a dos 32 bits complemento a dos 64 bits complemento a dos

byte

short

21 077 0xDC00

int

long

Reales en coma flotante:

Tipo float double 32 bits IEEE 754 64 bits IEEE 754

Por ejemplo

3.18 2e12 3.1E12

Booleanos:

true false

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

Cadenas:
Por ejemplo:
"Esto es una cadena"

Tipos de datos, variables y matrices

Sintaxis

Declaracin de una variable:


tipo nombre_variable; byte b,c;

Ejemplos:
int a, b, c; int d = 3, e, f = 5; byte z = 22; double pi = 3.14159; char X = x;

Inicializacin dinmica

Se hace utilizando expresiones validas en el instante en el que la variable es declarada.

Tipos simples

Enteros
byte,

short, int y long

Nmeros en coma flotante


float double

Caracteres
Char

Booleano
boolean

Enteros:
Byte Tamao 8-bits. Valores entre -128 y 127.

Enteros:
short Tamao 16-bits. Entre -32,768 y 32,767.

Enteros:
int Tamao 32-bits. Entre -2,147,483,648 y 2,147,483,647.

Enteros:
long Tamao 64-bits. Entre -9,223,372,036,854,775,808 y 9,223,372,036,854,775,807.

Ejercicio

//calcula la distancia que recorre la luz. utiliza variables long

class Luz{ public static void main(String args[]){ int velocidadluz; long dias; long segundos; long distancia;

//velocidad aproximada de la luz en kilometros por segundo = 30000; velocidadluz = 300000; dias = 1000; //especifica el nmero de dias segundos = dias * 24 * 60 * 60; //convierte a segundos distancia = velocidadluz * segundos; // calcula la distancia System.out.print("En " + dias); System.out.print("dias la luz recorrera cerca de"); System.out.println(distancia + "kilometros"); } }

Nmeros en coma flotante:

float Tamao 32-bits Con un rango de 3.4e-038 a 3.4e+038

Nmeros en coma flotante:


double Tamao 64-bits. Con un rango de 1.7e-308 a 1.7e+308

Ejercicio

//Calcula el rea de un circulo

class Area{ public static void main(String args[]){ double pi, r, a; r = 10.8; //radio del circulo pi = 3.1416; //pi, aproximadamente a = pi * r * r; //calcula el area System.out.println("El area del circulo es " + a);
} }

Caracteres:
char Tamao 16-bits. Unicode. Desde '\u0000' a '\uffff' inclusive. Esto es desde 0 a 65535

Ejercicio

//Muestra la utilizacin de variables de tipo char

class CharDemo{ public static void main(String args[]){ char ch1, ch2; ch1 = 88; //codigo de X ch2 = 'Y';
System.out.print("ch1 y ch2: "); System.out.println(ch1 + " " + ch2); } }

Ejercicio

//las variables char se comportan como enteros

class CharDemo2{ public static void main(String args[]){ char ch1; ch1 = 'X'; System.out.println("ch1 contiene " + ch1);
ch1++; //incrementa ch1 System.out.println("ch1 es ahora " + ch1); } }

Booleano:
Boolean Puede contener los valores true o false.

Ejercicio
Usa ya operadores de comparacin Expresiones condicionales como:

If For

//Muestra la utilizacin de variables booleanas

class BoolTest{ public static void main(String args[]){ boolean b;

b = false; System.out.println("b es " +b); b = true; System.out.println("b es " +b);


//un valor boleano puede controlar la sentencia if if(b) System.out.println("Esta sentencia si se ejecuta."); b = false; if(b) System.out.println("Esta sentencia no se ejecuta."); //el resultado de un operador relacional es un valor boleano System.out.println("10 > 9 es " + (10>9)); } }

Inicializacin dinmica

Java permite que las variables sean inicializadas dinmicamente utilizando expresiones vlidas en el instante en el que la variable es requerida.

Ejercicio

//Ejemplo de inicializacin dinmica

class DynInit{ public static void main(String args[]){ double a = 3.0, b = 4.0;
//inicializa dinmicamente la variable c double c = Math.sqrt(a * a + b * b); System.out.println("La hipotenusa es " + c); } }

mbito y tiempo de vida de las variables


main() mtodos pblicas privadas

Ejercicio

//Ejemplo del mbito de un bloque

class Scope{ public static void main(String args[]){ int x; //visible por todo el cdigo main
x = 10; if(x==10){//comienza un nuevo mbito int y = 20; //visible slo en este bloque //x e y son visibles aqui System.out.println("x e y: " + x + " " + y ); x = y * 2; } //y = 100; //Error! y no es visible aqu //x todava es visible aqu System.out.println("x es " + x); }

Las variables se crean cuando se entra en su mbito y se destruyen cuando se sale de su mbito

Conversiones de tipos

Java convierte automticamente:


Compatibles:

int, long byte, short, long

Java realiza un cast o conversin explicita entre tipos no compatibles:


No

compatibles:
double, byte char, boolean

Conversiones automticas de Java

Condiciones:
Los

dos tipos son compatibles El tipo destino es ms grande que el tipo origen

Qu ocurre?
Un

ensanchamiento o promocin. Ejemplo:


El tipo int es suficientemente grande como para almacenar un valor byte

Conversin de tipos incompatibles

Por ejemplo si quiero convertir:


int

a byte byte es ms pequeo que int Se le llama a este tipo de conversin estrechamiento

Se usa un cast

Es una conversin de tipo explicita y tiene la siguiente forma:

(tipo) valor Donde: tipo indica el tipo al que se ha de convertir el valor especificado

Ejemplo:
Convierte

de int a byte

int a; byte b;
b = (byte) a;

Ejercicio

//Ejemplo de conversin de tipo explcita

class Conversion{ public static void main(String args[]){ byte b; int i = 257; double d = 323.142; System.out.println("\nConversion de int a byte."); b = (byte) i; System.out.println("i y b: " +i + " " + b); System.out.println("\nConversion de double a int."); i = (int) d; System.out.println("d e i: " +d + " " + i); System.out.println("\nConversion de double a byte."); b = (byte) d; System.out.println("d y b: " +d + " " + b); } }

Promocin de tipo automtica en expresiones


Se da cuando se supera el rango permitido por el tipo de dato. Ejemplo:

byte

a = 40; byte b = 50; byte c = 100; Int d = a + b

El resultado de a * b podra superar el rango de cualquiera de sus operandos de tipo byte Java promociona automticamente los operandos de tipo byte o short a int cuando calcula la expresin

Reglas de promocin de tipos


byte, shor a int long a long float a float double a double

Ejercicio

//Revisin de las reglas de promocin

class Promote{ public static void main(String args[]){ byte b = 42; char c = 'a'; short s = 1024; int i = 50000; float f = 5.67f; double d = .1234; double result = (f * b) + (i / c) - (d * s); System.out.println((f * b) + " + " + (i / c) + " - " + (d * s)); System.out.println("resultado = " + result); } }

Arreglos

Una matriz o arreglo es un grupo de variables del mismo tipo a las que se hace referencia con el mismo nombre. Se pueden crear matrices de cualquier tipo y pueden tener una o mas dimensiones

Se pueden declarar en Java arrays de cualquier tipo:


char

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

Incluso se pueden construir arrays de arrays:


int

Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar desbordamientos y la corrupcin de memoria.

Matriz unidimensional
1. tipo nombre_matriz [ ];
int dias[ ]; //declaracin

2. nombre_matriz = new tipo [tamao] //new reserva memoria

dias = new int [12];

Java reserva memoria dinmicamente

Ejercicio

/Ejemplo de una matriz unidimensional

class Array{ public static void main(String args[]){ int dias[ ]; // p bien int dias[ ] = new int[12]; dias = new int[12]; dias[0] = 31; dias[1] = 28; dias[2] = 31; dias[3] = 30; dias[4] = 31; dias[5] = 30; dias[6] = 31; dias[7] = 31; dias[8] = 30; dias[9] = 31; dias[10] = 30; dias[11] = 31; System.out.println("Abril tiene " + dias[3] + "dias."); } }

Inicializacin de matrices al declararse


Es una listas de expresiones separadas por comas y entre llaves { } Los valores se separan con las comas

Ejercicio

//Versin mejorada del programa anterior

class AutoArray{ public static void main(String args[]){ int dias[] = {31,28,31,30,31,30,31,31,30,31,30,31}; System.out.println("Abril tiene " + dias[3] + "dias"); } }

Ejercicio

//Calcula la media de los valores de una matriz

class Media{ public static void main(String args[]){ double nums[] = {10.1, 11.2, 12.3, 13.4, 14.5}; double result = 0; int i; for(i=0; i<5; i++) result = result + nums[i];

System.out.println("La media es " + result/5);


} }

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( "Juan" ); nombres[1] = new String( "Pepe" ); nombres[2] = new String( "Pedro" ); nombres[3] = new String( "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 < 10; i++ ) lista[i] = i;

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.

Matriz multidimensionales

Son matrices de matrices

Declaracin

Bidimensional
Int

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

Ejercicio

//Ejemplo de una matriz bidimensional

class DosDArray{ public static void main(String args[]){ int dosD[][] = new int[4][5]; int i, j, k = 0; for(i=0; i<4; i++) for(j=0; j<5; j++){ dosD[i][j] = k; k++; } for(i=0; i<4; i++){ for(j=0; j<5; j++) System.out.println(dosD[i][j] + " "); System.out.println("&&"); } } }

Cuando se reserva memoria para una matriz multidimensional, solo es necesario especificar la memoria que necesita la primera dimensin, despus se reservara para las otras dimensiones

Ejemplo:
int

dosD[][] = new int [4][]; dosD[0] = new int[5]; dosD[1] = new int[5]; dosD[2] = new int[5]; dosD[3] = new int[5];

Vista conceptual de matriz bidimensional de 4 x 5


[0] [0]
[1] [0] [2] [0] [3] [0]

[0] [1]
[1] [1] [2] [1] [3] [1]

[0] [2]
[1] [2] [2] [2] [3] [2]

[0] [3]
[1] [3] [2] [3] [3] [3]

[0] [4]
[1] [4] [2] [4] [3] [4]

Ejercicio

//Reserva distintos tamaos para la segunda dimensin de cada elemento

class DosDArrayN{ public static void main(String args[]){ int dosD[][] = new int[4][]; dosD[0] = new int[1]; dosD[1] = new int[2]; dosD[2] = new int[3]; dosD[3] = new int[4];

int i, j, k = 0;
for(i=0; i<4; i++) for(j=0; j<i+1; j++){ dosD[i][j] = k; k++; } for(i=0; i<4; i++){ for(j=0; j<i+1; j++) System.out.print(dosD[i][j] + " "); System.out.println(); } } }

Inicializacin de matrices multidimensionales

Es necesario encerrar entre llaves el inicializador de cada dimensin

Ejercicio

//Inicializa una matriz bidimensional

class Matrix{ public static void main(String args[]){ double m[][] = { { 0*0, 1*0, 2*0, 3*0 }, { 0*1, 1*1, 2*1, 3*1 }, { 0*2, 1*2, 2*2, 3*2 }, { 0*3, 1*3, 2*3, 3*3 } }; int i,j; for(i=0; i<4; i++){ for(j=0; j<4; j++) System.out.print(m[i][j] + " "); System.out.println(); } } }

Ejercicio

//Ejemplo de una matriz tridimensional

class threeDMatrix{ public static void main(String args[]){ int threeD[][][] = new int [3][4][5]; int i,j,k; for(i=0; i<3; i++) for(j=0; j<4; j++) for(k=0; k<5; k++) threeD[i][j][k] = i * j * k; for(i=0; i<3; i++){ for(j=0; j<4; j++){ for(k=0; k<5; k++) System.out.print(threeD[i][j][k] + " "); System.out.println(); } System.out.println(); } } }

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:

[] ++

() --

!
* + << < & &&

~
/ >> > ^ || <= | >= == != %

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.

Operadores aritmticos

+
% *=

++ /=

*
-%=

/
-= --

Ejercicio

//Muestra los operadores aritmticos bsicos

class BasicMath{ public static void main(String args[]){ //operaciones aritmeticas con enteros System.out.println("Aritmetica con enteros"); int a = 1 + 1; int b = a * 3; int c = b / 4; int d = c - a; int e = -d; System.out.println("a = " +a); System.out.println("b = " +b); System.out.println("c = " +c); System.out.println("d = " +d); System.out.println("e = " +e); //aritmetica utilizando el tipo double System.out.println("\nAritmetica en coma flotante"); double da = 1 + 1; double db = da * 3; double dc = db / 4; double dd = dc - a; double de = -dd; System.out.println("da = " + da); System.out.println("db = " + db); System.out.println("dc = " + dc); System.out.println("dd = " + dd); System.out.println("de = " + de); } }

Operador Modulo
Devuelve el resto de un divisin. Se aplica tanto a tipos flotantes como a enteros.

Ejercicio

/ El operador %

class Modulo{ public static void main(String args[]){ int x = 42; double y = 42.3;
System.out.println("x mod 10 = " +x % 10); System.out.println("y mod 10 = " +y % 10);

}
}

Asignaciones con operadores aritmticos


Combina una operacin aritmtica con una asignacin Ejemplo:

= a + 4; a += 4;

Sintaxis:

var = var operador expresin;


var operador = expresin;

Ejercicio

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; }

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 );

Manejo de memoria y recoleccin de basura

Java tiene un colector automtico de basura. El manejo de memoria en Java esta basado en objetos y referencias a objetos. No hay apuntadores en Java.

El manejador de memoria de Java lleva un registro de las referencias a un objeto. Cuando un objeto no tiene referencias entonces se convierte en un candidato para ser considerado basura.

Por ejemplo, veamos la siguiente clase: // Voltea una cadena de caracteres class CADENA_ALREVES { public static String volteala(String FUENTE) { int I, LONGITUD = FUENTE.length(); StringBuffer DESTINO = new StringBuffer(LONGITUD); for ( I = (LONGITUD - 1); I >= 0; I--) { DESTINO.appendChar(FUENTE.charAt(I)); } return DESTINO.toString(); } }

En este ejemplo la variable DESTINO es usada como un objeto temporal de referencia durante la ejecucin del proceso de invertir una cadena. Cuando el mtodo "volteala" llega a su return la referencia al objeto DESTINO ya no existe, siendo entonces DESTINO un candidato a ser basura.

Los elementos de clase String (como FUENTE) tienen los mtodos length y charAt (el cual regresa el caracter correspondiente a la posicion indicada). Los elementos de la clase StringBuffer tienen los mtodos appendChar (el cual incluye un caracter al final del buffer) y toString (el cual transforma los datos del buffer en una representacin de tipo String).