Você está na página 1de 23

Introduccin al Lenguaje Java

INTRODUCCION AL LENGUAJE JAVA

1. Orgenes de Java
Java es un lenguaje de programacin orientado a objetos desarrollado por Sun Microsystems a principio de los
aos 90s. En Diciembre de 1950 Patrick Naughton, ingeniero de Sun Microsystems, reclut a varios colegas
entre ellos James Gosling y Mike Sheridan para trabajar sobre un nuevo proyecto conocido como green
team".

Con la ayuda de otros ingenieros, empezaron a trabajar en una pequea oficina en Sand Hill Road en Menlo
Park, California. Intentaban desarrollar una nueva tecnologa para programar la siguiente generacin de
dispositivos inteligentes, en los que Sun vea un campo nuevo a explorar. Crear un lenguaje de programacin
fcil de aprender y de usar.

En un principio se consideraba C++ como lenguaje a utilizar, pero tanto Gosling como Bill Joy lo encontraron
inadecuado. Gosling intent primero extender y modificar C++ resultando el lenguaje C++ ++ - (++ - porque se
aadan y eliminaban caractersticas a C++), pero lo abandon para crear un nuevo lenguaje desde cero al que
llamo Oak (roble en ingls).

El resultado fue un lenguaje que tena similitudes con C, C++ y Objetive C y que no estaba ligado a un tipo de
CPU concreta. Mas tarde, se cambiara el nombre de Oak a Java, por cuestiones de propiedad intelectural, al
existir ya un lenguaje con el nombre de Oak. Se supone que le pusieron ese nombre mientras tomaban caf
(Java es nombre de un tipo de caf, originario de Asia), aunque otros afirman que el nombre deriva de las siglas
de James Gosling, Arthur Van Hoff, y Andy Bechtolsheim.

En Agosto de 1991 Oak ya corra sus primeros programas y para 1992, el equipo ya haba desarrollado un
sistema en un prototipo llamado Star7 (*7), dispositivo parecido a una PDA. El equipo de trabajo continu con
el desarrollo, incluyendo el sistema operativo, Green OS al lenguaje Oak, libreras, algunas aplicaciones bsicas
y el hardware, hasta que el 3 de septiembre de 1992 se termina el desarrollo y con ello el green team.

En 1994 el green team coincidi con el nacimiento del fenmeno mundial WEB. Al examinar las dinmicas de
Internet, Patrick Naughton procedi a la construccin del lenguaje de programacin Java que se accionaba con
un browser prototipo. El 29 de septiembre de 1994 se termina el desarrollo del prototipo de HotJava. Con el
paso del tiempo HotJava se convirti en un concepto prctico dentro del lenguaje Java y demostr que podra
proporcionar multiplataformas para que el cdigo pueda ser bajado y corrido del Host del World Wide Web
(una de las caractersticas de HotJava fue su soporte para los "applets").

El 23 de mayo de 1995, en la conferencia SunWorld `95, John Gage, de Sun Microsystems, y Marc Andreessen,
cofundador y vicepresidente de Netscape, anunciaban la versin alpha de Java, que en ese momento solo
corra en Solaris. Con la segunda alpha de Java en Julio, se aade el soporte para Windows NT y en la tercera,
en Agosto, para Windows 95.

Muy pronto las licencias o permisos contemplaban prestigiosas firmas como: IBM, Microsoft, Symantec, Silicon
Graphics, Oracle, Toshiba y Novell. Los apples Java (basados en JDK 1.02) son apoyados por los dos ms
populares navegadores web (Nestcape Navigator 3.0 y Microsoft Internet Explorer 3.0. I.B.M./Lotus, Computer
Asociates, Symantec, Informix, Oracle, Sybase y otras poderosas empresas de software estn construyendo
Software 100% puro JAVA, por ejemplo el Corel Office que actualmente est en versin Beta.

Programacin II | 1
Dra. Estela Lizbeth Muoz Andrade
Introduccin al Lenguaje Java

Los nuevos proyectos de Java son co-patrocinados por cientos de millones de dlares en capital disponible de
recursos tales como la Fundacin Java, un fondo comn de capital formado el verano pasado por 11
compaas, incluyendo Cisco Systems, IBM, Netscape y Oracle.

En la actualidad, se puede encontrar la tecnologa Java en redes y dispositivos que comprenden desde Internet
y superordenadores cientficos hasta porttiles y telfonos mviles; desde simuladores de mercado en Wall
Street hasta juegos de uso domstico y tarjetas de crdito: Java est en todas partes.

El ao pasado, en 2009 la empresa de software estadounidense Oracle compr a Sun Microsystems ya que
esta empresa tena grandes deudas. El inters principal de Oracle en adquirir a Sun tiene sentido ya que
muchas de las aplicaciones de Oracle corren bajo Sun.

2. El entorno de desarrollo de Java


Existen distintas ediciones de Java (Figura 1) para el desarrollo de aplicaciones en distintos mbitos:

 Aplicaciones de propsito general (J2SE)


 Aplicaciones de gestin en entornos empresariales (J2EE)
 Aplicaciones para telfonos mviles, PDAs y otros dispositivos electrnicos que permitan aplicaciones
empotradas (J2ME)

Figura 1. Ediciones de Java

La ms utilizada es sin duda la edicin estndar (J2SE). Los ejemplos de cdigo Java que veremos en el curso
pertenecen a esta edicin, aunque tambin utilizaremos algunas clases pertenecientes a J2EE.

Programacin II | 2
Dra. Estela Lizbeth Muoz Andrade
Introduccin al Lenguaje Java

2.1 Arquitectura de la tecnologa Java (JRE, JVM, GC)

La tecnologa Java es sumamente especial, se trata de un lenguaje de programacin y una plataforma de


desarrollo (Figura 2) que se conforma por tres elementos: JRE, JVM y GC.

JRE Java Runtime Environment


El ambiente en tiempo de ejecucin, es el software responsable de permitir al usuario final ejecutar las
aplicaciones. Java posee una coleccin o librera estndar de clases que son indispensables para el
funcionamiento de los programas, adems de incluir una maquina virtual para el lenguaje java.

JVM Java Virtual Machine


La maquina virtual de java (Java VM) provee una especificacin de plataforma la cual le permite tomar
cualquier cdigo hecho en java y generar un archivo precompilado llamado bytecode que es un conjunto de
instrucciones que puede ser interpretado por cualquier maquina virtual de java.

GC - Garbage Collection
Muchos lenguajes de programacin permiten alojar memoria de manera dinmica en tiempo de ejecucin. El
proceso para alojar memoria varia de acuerdo a las caractersticas del lenguaje y en ciertas ocasiones los
bloques de memoria reservados nunca son liberados, principalmente por que esta tarea se deja a cargo del
programador (como en C/C++).

Figura 2. Tecnologa Java

Existen dos kits diferentes que permiten tanto el desarrollo de aplicaciones, as como su ejecucin:

 El Java Development Kit (JDK) permite desarrollar y ejecutar aplicaciones Java


 El Java Runtime Environment (JRE) permite nicamente la ejecucin

Programacin II | 3
Dra. Estela Lizbeth Muoz Andrade
Introduccin al Lenguaje Java

J2SE incluye bibliotecas muy extensas y completas, que permiten la implementacin de casi cualquier
tipo de aplicacin:

 Seguridad  Sonido
 EEDDs  Interfaz de usuario (AWT, SWING)
 Componentes (JavaBeans)  Grficos 2D
 Internacionalizacin  Manipulacin, carga y descarga de
 E/S imgenes
 XML  Impresin
 Redes y acceso a Internet  Acceso a bases de datos (JDBC)
 Programacin distribuida (RMI, CORBA)  Gestin de preferencias y configuraciones
 Matemtica de precisin arbitraria

2.1 El compilador de Java

Java sigue un esquema no tradicional de compilacin/ejecucin: La compilacin genera un ejecutable en


bytecode o cdigo intermedio independiente. Para su ejecucin se requiere un JRE especfico de la plataforma.
El JRE est formado por una mquina virtual java (JVM) y las libreras de clases. La JVM interpreta el bytecode o
realiza su compilacin (just in time) para que su ejecucin sea ms eficiente.

Programacin II | 4
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

Ventajas de este esquema:

 Se compila la aplicacin una nica vez y los ejecutables en bytecode obtenidos son vlidos para cualquier
plataforma. El cdigo fuente queda a salvo.
 Es muy robusto. La mquina virtual Java es capaz de detectar y notificar gran cantidad de errores durante
la ejecucin de la aplicacin (como accesos a elementos fuera de un vector).
 El recolector de basura no ocupa espacio en el ejecutable, ya que viene integrado en la JVM
 Los ejecutables son pequeos porque las libreras de clases vienen proporcionadas junto a la JVM en el JRE
de la plataforma concreta

3. Fundamentos del lenguaje Java

3.1 Convenciones de escritura en Java

Los nombres de Java son sensibles a las letras maysculas y minsculas. As, las variables masa, Masa y MASA
son consideradas variables completamente diferentes. Las reglas del lenguaje respecto a los nombres de
variables son muy amplias y permiten mucha libertad al programador, pero es habitual seguir ciertas normas
que facilitan la lectura y el mantenimiento de los programas de ordenador. Se recomienda seguir las siguientes
instrucciones.

Nombres de variables, mtodos y objetos.


Deben comenzar con minscula y si existe una combinacin de palabras la primera letra de la segunda palabra
debe ir en mayscula. (elMayor(), ventanaCerrable, rectanguloGrafico, addWindowListener()).

Nombres de clases e interfaces.


Deben comenzar siempre por mayscula (Ejemplos: Geometria, Rectangulo, Dibujable, Graphics, ArrayList,
Iterator).

Nombres de variables finales.


Las constantes, se definen siempre con maysculas (Ejemplo: PI)

Nombres de paquetes.
Deben escribirse todas las letras en minsculas

3.2 Palabras reservadas

Cuando hablamos de lenguajes de programacin debemos tomar en cuenta ciertas convenciones y


consideraciones relativas a la manera en que trabaja el lenguaje de programacin, as como observar los
elementos de lenguaje ms bsicos que nos permiten entender el mecanismo de programacin y los elementos
del lenguaje.

Las palabras claves tienen un significado especial para el compilador de Java, ya que identifican el nombre de
un tipo de dato o una construccin de programa. Es decir son el conjunto de primitivas que forman al lenguaje
de programacin, adems de la estructura gramatical que forma el lenguaje de programacin.

Programacin II | 5 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

A continuacin se muestra el conjunto de primitivas del lenguaje Java:

Notas importantes acerca de las palabras clave:

Las literales true, false y null se escriben en minsculas, estrictamente hablando no son palabras claves.
No existe el operador sizeof que nos permita acceder a la memoria, pero se cuanta con otro operador mas
potente que nos permite manipular objetos propiamente.
Las palabras claves goto y const no son usadas en el lenguaje Java.

Comentarios
Los comentarios de documentacin se colocan inmediatamente antes de una declaracin (de variables,
mtodos o clases) indicando que los comentarios deben ser incluidos en alguna documentacin que es
generada de manera automtica (por ejemplo, los archivos HTML generados por el comando javadoc) para
servir como descripcin de los elementos declarados.

Existe el comentario en una sola lnea: // comentario


Y existe la documentacin en bloque, que abarca un mayor nmero de lneas, que comprende desde el inicio
de bloque (/*) hasta el final del mismo (*/).

/* inicio de comentario
y el final */

Bloques de cdigo
En el lenguaje de programacin java un estatuto es una o ms lneas de cdigo que terminan con punto y coma
(;), por ejemplo:

total = a + b +c + d; tambin
total = a + b
+ c + d;

Un bloque, algunas veces llamado estatuto compuesto, es un grupo de estatutos encerrados entre llaves de
apertura y cierre ({}). Un bloque es til cuando se requiere agrupar estatutos.

// un bloque de estatutos
{
x = y +1;
y = x +1;
}
Programacin II | 6 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

// un bloque de estatutos puede estar


// contenido en otro bloque.

while ( i < long ) {


a = a + i;
// otro bloque
if ( a == max ) {
b = b + a;
a = 0;
}
i = i + 1;
}

3.3 Tipos de datos, Variables y Operadores

3.3.1 Tipos de datos primitivos

El lenguaje de programacin Java cuenta con varios tipos de datos, los cuales se encuentran dentro de dos
grandes categoras: los tipos primitivos y los referenciados. Los tipos primitivos son valores simples, mientras
que los referenciados son objetos. Los tipos clase son usados para tipos de datos ms complejos, incluyendo
todos los tipos que el programador desarrolle.

Datos primitivos
El lenguaje Java define ocho tipos primitivos, los cuales pueden ser considerados en cuatro categoras:

o Lgicos boolean
o Texto char
o Enteros byte, short, int y long
o Punto flotante float y double

Programacin II | 7 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

Lgicos. Los valores lgicos son representados usando los tipos bolanos, los cuales toman uno de dos posibles
valores literales: true (verdadero) false (falso). No existe ajuste (cast) entre valores de tipo entero y
bolanos, como ocurre en otros lenguajes de programacin como C/C++. Solo pueden usarse cualquiera de las
dos literales definidas.

Texto. Los caracteres simples son representados usando el tipo char. Un char representa un carcter de 16-bits
en UNICODE. Los caracteres deben ser indicados como literales encerrados en comilla simple ( ), por ejemplo:

a letra a
\t tabulacin
\u????

Un carcter especifico UNICODE, las interrogaciones (????) son reemplazadas con exactamente cuatro dgitos
hexadecimales. Por ejemplo \u03A6 es (phi). Ahora mostramos un ejemplo de declaracin e inicializacin
de una variable tipo carcter.

char ch = A;

Enteros. Existen cuatro tipos enteros en Java. Cada tipo es declarado usando una de sus palabras claves, byte,
short, int long. Se pueden crear literales de tipos enteros usando la forma decimal, octal y hexadecimal.

2 Forma decimal del numero 2


077 0 indica un nmero octal
0xBAAC 0x indica un nmero hexadecimal

Todas las literales enteras son de tipo int a no ser que se especifique lo contrario, es decir se puede agregar al
final de la literal numrica la letra L, que indica que el valor ser entero largo.

Punto flotante. Los tipos flotantes pueden declararse como float o doubl. Las literales flotantes pueden incluir
el punto decimal o el trmino exponente E, adems de las letras F para float y D para doubl. Algunos ejemplos
de nmeros flotantes son:

3.14 valor simple flotante (double)


6.02E23 valor de punto flotante largo
2.718F valor de punto flotante simple
123.4E+306D valor doubl flotante

Los nmeros flotantes en Java ocupan 32 bits, mientras que los valores doubls ocupan 64 bits.

Programacin II | 8 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

A continuacin se presenta una tabla con el tamao y rango que representan los nmeros:

3.3.2 Declaracin de variables

Programacin II | 9 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

3.3.3 Constantes

3.3.4 Tipos de datos referenciados (String, Arrays, Wrappers)

Los tipos de datos referenciados son aquellos que almacenan una referencia (un puntero) hacia el valor real de
la variable. En Java los arrays, las clases e interfaces, los datos String y wrappers son tipos de datos
referenciados

Datos de tipo Array (vectores, matrices)


Java dispone de un tipo de dato array que permite guardar grupos de datos similares. Java trata los arrays
como un tipo de objeto y por lo tanto este se tendr que instanciar con el operador new.

Para crear un array tenemos que especificar una variable que se utilizara como ndice para acceder al array y el
tipo de datos que este contendr. Antes de poder utilizar un array hay que declararlo, como Java trata este tipo
como un objeto, el array en este caso no reserva memoria para contener los datos, sino que solamente localiza

Programacin II | 10 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

memoria para almacenar una referencia al array, por ejemplo cuando se pasa una matriz a un mtodo, slo se
pasa la referencia y no todos los elementos de la matriz.

Ejemplo:

int miDato[] = new int[5];

// tambien se puede inicializar un array declarndolo de la siguiente forma


int miDato[] ={5,9,4,2,7};

String misdatos[] = new String[4];


int misdatos[][] = new int[20][10];

// para acceder a un elemento del array utilizamos ndices


misDatos[] = {"uno","dos","tres","cuatro");
misDatos[1] = "dos"
misDatos[0] = "uno"
....

//NOTA: todos los objetos array tienen acceso a un mtodo publico


"lenght()" que se utiliza para determinar su tamao.

int array[][] = new int[5][2];


array.length; // 5
array[0].length; // 2

Datos String
En realidad una variable de tipo String, ms que un tipo propio de Java es una clase tratada con todo rigor
como un objeto ms de Java, donde el contenido de las cadenas no se puede modificar aunque se vuelva a
definir la variable String. Si en un programa se necesita modificar el contenido de una cadena lo ms correcto
seria utilizar la clase StringBuffer, la cual posee un mtodo llamado append ().

Ejemplo:
String miCadena = "Esto es una cadena";

No podemos modificar su contenido pero si podemos hacer que mCadena se refiera a otra cadena nueva:

miCadena = miCadena + "otra cadena";

En este ejemplo muestra el hecho de que una cadena no puede ser modificada, y sin embargo una variable de
referencia puede modificarse para que apunte a una nueva cadena para que parezca que se ha modificado la
cadena original:

class miCadena{
String cadena1 = "PRIMERA CADENA";
String cadena2 = "SEGUNDA CADENA";
public static void main( String args[] ) {
miCadena cad = new miCadena();
System.out.println( "Los valores originales de las cadenas son:" );
System.out.println( cad.cadena1 );
Programacin II | 11 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

System.out.println( cad.cadena2 );
System.out.println( "Reemplaza cadena1 con otra cadena" );
cad.cadena1 = cad.cadena1 + " " + cad.cadena2;
System.out.println( "Nuevo valor de cadena1:" );
System.out.println( cad.cadena1 );
}
}

Datos de tipo Wrapper


Estas clases pertenecen al paquete java.lang y son las siguientes: Byte, Short, Integer, Long, Float, Double,
Boolean y Character. Uno de los usos ms habituales de las clases wrappers es el uso de mtodos estticos que
permiten obtener a partir de un String que almacena un nmero en forma de texto, el correspondiente valor
numrico almacenado en la variable primitiva que interese.

As, la clase Integer dispone del mtodo "static int parseInt(String)" que transforma la String del argumento en
un nmero que se almacena en la variable primitiva int.

Para el resto de las clases wrappers se tienen los siguientes mtodos:

Clase Mtodo Esttico


Byte byte parseByte(String num)
Short short parseShort(String num)
Integer int parseInt(String num)
Long long parseLong(String num)
Float float parseFloat(String num)
Double double parseDouble(String num)

Si desearamos almacenar la cadena 250 en una variable int se utilizara el siguiente cdigo:

String s = 250;
Int num = Intger.parseInt(s);

Ejemplo:

public class ClaseWrapper{


public static void main(String args[]){
int num1=10;
String numTexto="125";
int num2=Integer.parseInt(numTexto);
System.out.println(num1+num2);
System.out.println(numTexto+num2);
if (num1+num2>130)
num1++;
else
num1--;
System.out.println(num1);
}
}

Programacin II | 12 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

Algunos mtodos de inters

static int parseInt(String num)


Convierte en un entero la cadena de texto que se le pasa al argumento. Si la cadena no es un nmero se
produce una NumberFormatException.

static int parseInt(String num, int base)


Identico al anterior, pero el segundo argumento indica el sistema de numeracin (base 2, base 8, base 10, base
16, etc.) en el que se expresa el primer argumento.

Ejemplo:

String num="1001"; // nmero binario o en base 2 almacenado en forma de String


System.out.println(Integer.parseInt(num,2)); //9

static Integer valueOf(String num)


Crea un objeto Integer en base a la cadena de texto que se le pasa. Si la cadena no es un nmero se produce
una NumberFormatException.

static String toHexString(int num)


Devuelve una cadena de texto cuyo contenido es el entero expresado en hexadecimal del entero expresado en
decimal que se le pasa al argumento.

static String toOctalString(int num)


Idntico al anterior, pero ahora el contenido es un entero expresado en octal.

static String toBinaryString(int num)


Idntico al anterior, pero ahora el contenido es un entero expresado en binario.

int intValue()
Devuelve el entero asociado al contenido de un objeto Integer. Los mtodos anteriores, al ser estticos, no
precisan de un objeto Integer sobre el que aplicarlos; en cambio, este mtodo s.

3.3.5 Operadores

Java es un lenguaje rico en operadores, que son casi idnticos a los de C/C++. Estos operadores se describen
brevemente en los apartados siguientes.

Operadores aritmticos. Son operadores binarios (requieren siempre dos operandos) que realizan las
operaciones aritmticas habituales: suma (+), resta (-), multiplicacin (*), divisin (/) y resto de la divisin (%).

Operadores de asignacin. Los operadores de asignacin permiten asignar un valor a una variable. El operador
de asignacin por excelencia es el operador igual (=). La forma general de las sentencias de asignacin con este
operador es:

variable = expresion;
Programacin II | 13 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

Java dispone de otros operadores de asignacin. Se trata de versiones abreviadas del operador (=) que realizan
operaciones acumulativas sobre una variable.

Operadores unarios. Los operadores ms (+) y menos (-) unarios sirven para mantener o cambiar el signo de
una variable, constante o expresin numrica. Su uso en Java es el estndar de estos operadores.

Operador instanceof. El operador instanceof permite saber si un objeto pertenece o no a una determinada
clase. Es un operador binario cuya forma general es,

objectName instanceof ClassName

y que devuelve true o false segn el objeto pertenezca o no a la clase.

Operador condicional ?: Este operador, tomado de C/C++, permite realizar bifurcaciones condicionales
sencillas. Su forma general es la siguiente:

booleanExpression ? res1 : res2

donde se evala booleanExpression y se devuelve res1 si el resultado es true y res2 si el resultado es false. Es el
nico operador ternario (tres argumentos) de Java. Como todo operador que devuelve un valor puede ser
utilizado en una expresin. Por ejemplo las sentencias: x=1 ; y=10; z = (x<y)?x+3:y+8; asignaran a z el valor 4,
es decir x+3.

Operadores incrementales. Java dispone del operador incremento (++) y decremento (--). El operador (++)
incrementa en una unidad la variable a la que se aplica, mientras que (--) la reduce en una unidad. Estos
operadores se pueden utilizar de dos formas:

Precediendo a la variable (por ejemplo: ++i). En este caso primero se incrementa la variable y luego se utiliza
(ya incrementada) en la expresin en la que aparece.

Siguiendo a la variable (por ejemplo: i++). En este caso primero se utiliza la variable en la expresin (con el
valor anterior) y luego se incrementa.

En muchas ocasiones estos operadores se utilizan para incrementar una variable fuera de una expresin. En
este caso ambos operadores son equivalentes. Si se utilizan en una expresin ms complicada, el resultado de
utilizar estos operadores en una u otra de sus formas ser diferente. La actualizacin de contadores en ciclos
for es una de las aplicaciones ms frecuentes de estos operadores.

Programacin II | 14 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

Operadores relacionales. Los operadores relacionales sirven para realizar comparaciones de igualdad,
desigualdad y relacin de menor o mayor. El resultado de estos operadores es siempre un valor boolean (true o
false) segn se cumpla o no la relacin considerada.

Operadores lgicos. Los operadores lgicos se utilizan para construir expresiones lgicas, combinando valores
lgicos (true y/o false) o los resultados de los operadores relacionales. La siguiente tabla muestra los
operadores lgicos de Java. Debe notarse que en ciertos casos el segundo operando no se evala porque ya no
es necesario (si ambos tienen que ser true y el primero es false, ya se sabe que la condicin de que ambos sean
true no se va a cumplir). Esto puede traer resultados no deseados y por eso se han aadido los operadores (&)
y (|) que garantizan que los dos operandos se evalan siempre.

Operador de concatenacin de cadenas de caracteres (+). El operador ms (+) se utiliza tambin para
concatenar cadenas de caracteres. Por ejemplo, para escribir una cantidad con un rtulo y unas unidades
puede utilizarse la sentencia:

System.out.println("El total asciende a " + result + " unidades");

Donde, el operador de concatenacin se utiliza dos veces para construir la cadena de caracteres que se desea
imprimir por medio del mtodo println(). La variable numrica result es convertida automticamente por Java
en cadena de caracteres para poderla concatenar. En otras ocasiones se deber llamar explcitamente a un
mtodo para que realice esta conversin.

Precedencia de operadores. El orden en que se realizan las operaciones es fundamental para determinar el
resultado de una expresin. Por ejemplo, el resultado de x/y*z depende de qu operacin (la divisin o el
producto) se realice primero. La siguiente lista muestra el orden en que se ejecutan los distintos operadores en
una sentencia, de mayor a menor precedencia:

Programacin II | 15 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

En Java, todos los operadores binarios, excepto los operadores de asignacin, se evalan de izquierda a
derecha. Los operadores de asignacin se evalan de derecha a izquierda, lo que significa que el valor de la
derecha se copia sobre la variable de la izquierda.

3.4 Promocin y casting

Programacin II | 16 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

4. Clase Math
La clase Math representa la librera matemtica de Java. El constructor de la clase es privado, por lo 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.

Esta clase contiene variables de clase y mtodos estticos utilizados para realizar operaciones matemticas que
van desde el clculo de una raz cuadrada hasta el de funciones trigonomtricas. Se accede a los
datos/mtodos de la clase Math, de la siguiente forma: Math.nombreDato/Mtodo, ejemplo:

System.out.println("Pi es " + Math.PI);


System.out.println("e es " + Math.E);

La clase Math define dos constantes muy tiles que son PI y E:

public final class Math {


public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;

Programacin II | 17 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

El modificador final indica que los valores que guardan no se pueden cambiar, son valores constantes.

La clase Math define varias funciones y versiones distintas de cada funcin. Algunas funciones que se manejan
en Math son las funciones trigonomtricas, exponencial y logartmica, potencia y raz cuadrada, aproximacin
de un nmero decimal, mayor y el menor de dos nmeros, entre otros.

Ejemplo:

public class MatematicasApp {


public static void main(String args[]) {

int i = 7;
int j = -9;
double x = 72.3543;
double y = 0.3498;

System.out.println("i es " + i);


System.out.println("x es " + x);

// Valor absoluto de un nmero


System.out.println("|" + j + "| es " + Math.abs(j));

// aproximacin decimal empleando (round)


System.out.println(x + " es " + Math.round(x));
System.out.println(y + " es aprox." + (double)Math.round(y*100)/100);

//empleando floor
System.out.println("The floor of " + x + " es " + (100*Math.floor(x))/100);

// para hallar el menor de dos nmero


System.out.println("min(" + i + "," + j + ") es " + Math.min(i,j));

// el mayor de dos nmeros


System.out.println("max(" + x + "," + y + ") es " + Math.max(x,y));

// las constantes PI y E
System.out.println("Pi = " + Math.PI + "e = " + Math.E);

//funciones trigonomtricas
double angulo = 45.0 * Math.PI/180.0;
System.out.println("cos(" + angulo + ") es " + Math.cos(angulo));

//Funciones exponencial y logartmica


System.out.println("exp(1.0) es " + Math.exp(1.0));
System.out.println("log(1.0) es " + Math.log(1.0));

// pow(x,y) devuelve x elevado a y.


System.out.println("pow(2.0, 2.0) es " + Math.pow(2.0,2.0));
System.out.println("pow(8, -1) es " + Math.pow(8,-1));

Programacin II | 18 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

// sqrt(x) devuelve la raz cuadrada de x.


System.out.println("La raz cuadrada de " + y + " es " + Math.sqrt(y));

try { //espera se pulse una tecla y luego enter


System.in.read();
}catch (Exception ex) { }
}
}

Otra de las operaciones que se pueden resolver con la clase Math es la obtencin de nmeros aleatorios. La
clase Math define una funcin denominada random que devuelve un nmero pseudoaleatorio comprendido en
el intervalo [0.0, 1.0). Existe otra alternativa, se pueden generar nmeros pseudoaleatorios a partir de un
objeto de la clase Random, que llame a la funcin miembro nextDouble.

System.out.println("Nmero aleatorio: " + Math.random());


System.out.println("Otro nmero aleatorio: " + Math.random());

5. Funciones de entrada/salida estndar


Todo programa de computadora opera sobre un conjunto de datos de entrada y produce algn tipo de salida.
En sistemas como MS Windows o Unix (incluyendo Linux), en donde existe el concepto de terminal o consola
de texto, el sistema operativo provee un mecanismo bsico de interaccin con el usuario conectando el flujo de
datos proveniente del teclado a la llamada entrada estndar del programa, mostrando la "salida estndar"
del programa como texto desplegado en la pantalla.

La entrada estndar y la salida estndar pueden redireccionarse, haciendo que no solo sea posible leer datos
desde teclado y mostrarlos en pantalla, sino que tambin se pueden leer datos desde un archivo y enviarse
hacia otro.

Existen diversos tipos de entradas y salidas en java:

 Archivos, directorios, rutas (File, Directory, Path)


 Flujos de entrada y salida estndar (Standard I/O)
 Flujos de Bytes (Byte Streams)
 Flujos de Caracteres
 Flujos de datos
 Flujos de objetos

5.1 Salida de texto y variables por pantalla

Uno de los conceptos bsicos al momento de hacer un programa, es la salida de datos, bsicamente cualquier
programa cuenta con tres flujos de datos (streams) elementales, que representan la entrada estndar (in), la
salida estndar (out) y la salida de errores (err), normalmente en un programa de consola (sin graficos) estos
flujos estn conectados de la siguiente manera:

teclado -> in
Programacin II | 19 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

out -> pantalla


err -> pantalla

System.out.println, hace uso de la clase System, la cual contiene varios mtodos y campos estticos, que
son tiles a cualquier programa.

out es una variable miembro de la clase System, declarada como static y del tipo PrintStream, esta variable
miembro representa el flujo de datos asociado con la salida de nuestro programa (normalmente es la pantalla)

println() es un mtodo de la clase PrintStream que imprime el mensaje que pasamos como parmetro en el
flujo de datos, y agrega un carcter de final de lnea.

Ejemplo:

println( x )  print( x ) + print( enter ) ;

System.out.println("hola mundo"); /*imprime el mensaje "hola mundo" y agrega


un carcter de fin de linea */

5.2 Lectura desde teclado (uso de la clase Scanner)

Scanner class
La clase Scanner se encuentra en el paquete java.util, sta clase permite al usuario leer valores de diferentes
tipos. Existen diversos mtodos de la clase Scanner, por el momento solo analizaremos los mtodos bsicos
que permiten leer valores de tipo numrico y texto desde teclado.

La clase Scanner tiene dos constructores, uno de ellos lee los valores como objeto de tipo InputStream como
parmetro y el otro lee los valores como objetos de tipo FileReader.

Scanner in = new Scanner(System.in); // System.in es un InputStream


Scanner inFile = new Scanner(new FileReader("myFile"));

La clase Scanner permite separar un dato de entrada en subcadenas o tokens y adems convertir estos datos
en tipos primitivos como enteros, flotantes, etc. Por ejemplo, se puede pasar un dato String como argumento
al constructor, definir su patrn delimitador (por defecto: espacio en blanco) y obtener subcadenas cuyos
miembros se pueden recoger uno a uno mediante el mtodo next() o algunos de sus similares (para cada dato
primitivo existe un next()), por ejemplo:

public static void main(String[] args) {


String cadena = "Captura_desde_teclado";
Scanner s = new Scanner(cadena);
s.useDelimiter("_");
while(s.hasNext()){
System.out.println(s.next()); //s.next() devuelve cadena token
}
}

Programacin II | 20 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

En este programa se separarn en subcadenas separando por _ y se muestra cada trmino en una lnea en la
consola de java. Este tipo de uso es muy similar a usar la clase StringTokenizer.

Por otro lado, la clase Scanner tambin tiene un constructor que recibe un InputStream, por lo que podemos
pasarle al mismo la sentencia System.in para leer datos desde el teclado:

public static void main(String[] args) {


System.out.print("Introduzca datos: ");
Scanner s = new Scanner(System.in);
System.out.println(s.next());
System.out.println(s.nextInt());
System.out.println(s.nextLine());
}

Este ltimo cdigo lee datos a partir del teclado, separa en subcadenas con espacio en blanco como
delimitador, lee la primera cadena y la imprime en pantalla, espera un espacio, despus busca el siguiente dato
e intenta convertirlo a entero (int) si no puede hacerlo lanza un InputMismatchException y se detiene, de no
lanzar la excepcin lee el siguiente dato hasta el final de la lnea y lo imprime.

Mtodo Valor de retorno


int nextInt() Retorna el siguiente token como un int. Si el siguiente token no es un
int, entonces lanza la excepcin InputMismatchException
long nextLong() Retorna el siguiente token como un long. Si el siguiente token no es un
int, entonces lanza la excepcin InputMismatchException
float nextFloat() Retorna el siguiente token como un float. Si el siguiente token no es un
float o se encuentra fuera del rango, entonces lanza la excepcin
InputMismatchException
double nextDouble() Retorna el siguiente token como un long. Si el siguiente token no es un
float o se encuentra fuera del rango, entonces lanza la excepcin
InputMismatchException
String next() Encuentra y retorna un token complete indicando que es un string. Por
lo general un token termina con un espacio en blanco o un indicador de
fin de linea. Si no existe un token por leer entonces se lanza la
excepcin NoSuchElementException
String nextLine() Retorna el resto de la linea actual, excluyendo los separadores
void close() Cierra la clase Scanner (el flujo de entrada)

Ejemplo haciendo uso de la clase Scanner:

package pScanner;
import java.util.Scanner;

public class NumericInput{


public static void main(String[] args) {

Scanner in = new Scanner(System.in);


int integer;
long longInteger;
float realNumber;

Programacin II | 21 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

double doubleReal;
String string1;
String string2;

System.out.println("Enter an integer, a long integer, "+"a floating-point ");


System.out.println("number, another floating-point number,+ "and a string.");
System.out.println("Separate each with a blank or return.");

integer = in.nextInt();
longInteger = in.nextLong();
realNumber = in.nextFloat();
doubleReal = in.nextDouble();
string1 = in.nextLine();

System.out.println("Now enter another value.");


string2 = in.next();

System.out.println("Here is what you entered: ");


System.out.println(integer + " " + longInteger + " " + realNumber +
" " + doubleReal + " " + string1 +" and " + string2);
}

La salida ser:

Enter an integer, a long integer, a floating-point


number, another floating-point number, and a string.
Separate each with a blank or return.
8 164 8.9 3.5 sistemas
Now enter another value.
otro
Here is what you entered:
8 164 8.9 3.5 sistemas and otro

Otro ejemplo, pero ahora utilizando las clases InputStreamReader y BufferedReader:

import java.io.*;

public class SumaDatosTeclado{


public static void main(String args[])throws IOException{

//Creacin del flujo para leer datos


InputStreamReader isr=new InputStreamReader(System.in);

//Creacin del filtro para optimizar la lectura de datos


BufferedReader br=new BufferedReader(isr);
System.out.print("Teclea el primer numero: ");

//Lectura de datos mediante el mtodo readLine()


String texto1=br.readLine();

//Conversin a int de la String anterior para poder sumar


int num1=Integer.parseInt(texto1);

System.out.print("Teclea el segundo numero: ");


String texto2=br.readLine();
Programacin II | 22 | 2010.02
Dra. Estela Lizbeth Muoz Andrade
Programacin II | Introduccin al Lenguaje Java | 2010.02

int num2=Integer.parseInt(texto2);

//Sumar los dos enteros


System.out.println("Suma de "+num1+" y "+num2+" es "+(num1+num2));
}
}

La salida ser:

Teclea el primer numero: 3


Teclea el segundo numero: 5
Suma de 3 y 5 es 8

Referencias
Wu, Thomas. Programacin Java, Introduccin a la programacin orientada a objetos. McGraw Hill. ISBN
978-970-10-6634-8
http://www.cad.com.mx/historia_del_lenguaje_java.htm
http://download-llnw.oracle.com/javase/6/docs/
http://download.oracle.com/javase/6/docs/api/

Programacin II | 23 | 2010.02
Dra. Estela Lizbeth Muoz Andrade

Você também pode gostar