Академический Документы
Профессиональный Документы
Культура Документы
Cada intrprete Java es una implementacin de la Mquina Virtual Java (JVM). Los
bytecodes posibilitan el objetivo de "write once, run anywhere", de escribir el programa
una vez y que se pueda correr en cualquier plataforma que disponga de una implementacin
de la JVM. Por ejemplo, el mismo programa Java puede correr en Windows 98, Solaris,
Macintosh, etc.
Java es, por tanto, algo ms que un lenguaje, ya que la palabra Java se refiere a dos
cosas inseparables: el lenguaje que nos sirve para crear programas y la Mquina Virtual
Java que sirve para ejecutarlos. Como vemos en la figura, el API de Java y la Mquina
Virtual Java forman una capa intermedia (Java platform) que asla el programa Java de las
especificidades del hardware (hardware-based platform).
Esta ltima tarea, es una de las ms importantes que realiza la JVM. Adems, las propias
especificaciones del lenguaje Java contribuyen extraordinariamente a este objetivo:
Las referencias a arrays son verificadas en el momento de la ejecucin del programa
No hay manera de manipular de forma directa los punteros
La JVM gestiona automticamente el uso de la memoria, de modo que no queden huecos.
No se permiten realizar ciertas conversiones (casting) entre distintos tipos de
datos.
Por ejemplo, cuando el navegador encuentra una pgina web con un applet, pone en marcha
la JVM y proporciona la informacin que aparece en la etiqueta <APPLET > ... </APPLET>.
El cargador de clases dentro de la JVM ve que clases necesita el applet. Dentro del
proceso de carga, las clases se examinan mediante un verificador que asegura que las
clases contienen cdigo vlido y no malicioso. Finalmente, se ejecuta el applet.El
lenguaje Java
El lenguaje Java no est diseado solamente para crear applets que corren en la ventana
del navegador. Java es un lenguaje de propsito general, de alto nivel, y orientado a
objetos.
Java es un lenguaje de programacin orientado a objetos puro, en el sentido de que no hay
ninguna variable, funcin o constante que no est dentro de una clase. Se accede a los
miembros dato y las funciones miembro a travs de los objetos y de las clases. Por
razones de eficiencia, se han conservado los tipos bsicos de datos, int, float, double,
char, etc, similares a los del lenguaje C/C++.
Los tipos de programas ms comunes que se pueden hacer con Java son los applets (se
ejecutan en el navegador de la mquina cliente) y las aplicaciones (programas que se
ejecutan directamente en la JVM). Otro tipo especial de programa se denomina servlet que
es similar a los applets pero se ejecutan en los servidores Java.
La API de Java es muy rica, est formada un conjunto de paquetes de clases que le
proporcionan una gran funcionalidad. El ncleo de la API viene con cada una de las
implementaciones de la JVM:
Lo esencial: tipos de datos, clases y objetos, arrays, cadenas de caracteres
(strings), subprocesos (threads), entrada/salida, propiedades del sistema, etc.
Applets
Manejo de la red (networking)
Internacionalizacin
Seguridad
Componentes (JavaBeans)
Persistencia (Object serialization)
Conexin a bases de datos (JDBC)
Java proporciona tambin extensiones, por ejemplo define un API para 3D, para los
servidores, telefona, reconocimiento de voz, etc.
Identificadores
Un identificador es un nombre que identifica a una variable, a un mtodo o funcin
miembro, a una clase. Todos los lenguajes tienen ciertas reglas para componer los
identificadores:
Todos los identificadores han de comenzar con una letra, el carcter subrayado ( _
) o el carcter dlar ( $ ).
Puede incluir, pero no comenzar por un nmero
No puede incluir el carcter espacio en blanco
Distingue entre letras maysculas y minsculas
No se pueden utilizar las palabras reservadas como identificadores
Adems de estas restricciones, hay ciertas convenciones que hacen que el programa sea ms
legible, pero que no afectan a la ejecucin del programa. La primera y fundamental es la
de encontrar un nombre que sea significativo, de modo que el programa sea lo ms legible
posible. El tiempo que se pretende ahorrar eligiendo nombres cortos y poco significativos
se pierde con creces cuando se revisa el programa despus de cierto tiempo.
Tipo de
Convencin
Ejemplo
identificador
nombre de una
Comienza por letra
String, Rectangulo,
clase
mayscula
CinematicaApplet
comienza con letra
calcularArea, getValue,
nombre de funcin
minscula
setColor
comienza por letra
nombre de variable
area, color, appletSize
minscula
nombre de
En letras maysculas
PI, MAX_ANCHO
constante
Comentarios
Un comentario es un texto adicional que se aade al cdigo para explicar su
funcionalidad, bien a otras personas que lean el programa, o al propio autor como
recordatorio. Los comentarios son una parte importante de la documentacin de un
programa. Los comentarios son ignorados por el compilador, por lo que no incrementan el
tamao del archivo ejecutable; se pueden por tanto, aadir libremente al cdigo para que
pueda entenderse mejor.
La programacin orientada a objetos facilita mucho la lectura del cdigo, por lo que lo
que no se precisa hacer tanto uso de los comentarios como en los lenguajes estructurados.
En Java existen tres tipos de comentarios
Comentarios en una sola lnea
Comentarios de varias lneas
Comentarios de documentacin
Como podemos observar un comentario en varias lneas es un bloque de texto situado entre
el smbolo de comienzo del bloque /*, y otro de terminacin del mismo */. Teniendo
encuentra este hecho, los programadores disean comentarios como el siguiente:
/*--------------------------------|
|
(C) Angel Franco Garca
|
|
fecha: Marzo 1999
|
|
programa: PrimeroApp.java
|
|---------------------------------*/
Los comentarios de documentacin es un bloque de texto situado entre el smbolo de
comienzo del bloque /**, y otro de terminacin del mismo */. El programa javadoc utiliza
estos comentarios para generar la documentacin del cdigo.
/** Este es el primer programa de una
serie dedicada a explicar los fundamentos del lenguaje Java */
Habitualmente, usaremos comentarios en una sola lnea //, ya que no tiene el
inconveniente de aprendernos los smbolos de comienzo y terminacin del bloque, u
olvidarnos de poner este ltimo, dando lugar a un error en el momento de la compilacin.
En la ventana de edicin del Entorno Integrado de Desarrollo (IDE) los comentarios se
distinguen del resto del cdigo por el color del texto.
public class PrimeroApp{
Expresiones
Una expresin es todo aquello que se puede poner a la derecha del operador asignacin =.
Por ejemplo:
x=123;
y=(x+100)/4;
area=circulo.calcularArea(2.5);
Rectangulo r=new Rectangulo(10, 10, 200, 300);
La primera expresin asigna un valor a la variable x.
La segunda, realiza una operacin
La tercera, es una llamada a una funcin miembro calcularArea desde un objeto circulo de
una clase determinada
La cuarta, reserva espacio en memoria para un objeto de la clase Rectangulo mediante la
llamada a una funcin especial denominada constructor.
Variables
Una variable es un nombre que se asocia con una porcin de la memoria del ordenador, en
la que se guarda el valor asignado a dicha variable. Hay varios tipos de variables que
requieren distintas cantidades de memoria para guardar datos.
Todas las variables han de declararse antes de usarlas, la declaracin consiste en una
sentencia en la que figura el tipo de dato y el nombre que asignamos a la variable. Una
vez declarada se le podr asignar valores.
Java tiene tres tipos de variables:
de instancia
de clase
locales
Las variables de instancia o miembros dato como veremos ms adelante, se usan para
guardar los atributos de un objeto particular.
Las variables de clase o miembros dato estticos son similares a las variables de
instancia, con la excepcin de que los valores que guardan son los mismos para todos los
objetos de una determinada clase. En el siguiente ejemplo, PI es una variable de clase y
radio es una variable de instancia. PI guarda el mismo valor para todos los objetos de la
clase Circulo, pero el radio de cada crculo puede ser diferente
class Circulo{
static final double PI=3.1416;
double radio;
//...
}
Las variables locales se utilizan dentro de las funciones miembro o mtodos. En el
siguiente ejemplo area es una variable local a la funcin calcularArea en la que se
guarda el valor del rea de un objeto de la clase Circulo. Una variable local existe
desde el momento de su definicin hasta el final del bloque en el que se encuentra.
class Circulo{
//...
double calcularArea(){
double area=PI*radio*radio;
return area;
}
}
En el lenguaje Java, las variables locales se declaran en el momento en el que son
necesarias. Es una buena costumbre inicializar las variables en el momento en el que son
declaradas. Veamos algunos ejemplos de declaracin de algunas variables
int x=0;
String nombre="Angel";
double a=3.5, b=0.0, c=-2.4;
boolean bNuevo=true;
int[] datos;
Delante del nombre de cada variable se ha de especificar el tipo de variable que hemos
destacado en letra negrita. Las variables pueden ser
Un tipo de dato primitivo
El nombre de una clase
Un array
El lenguaje Java utiliza el conjunto de caracteres Unicode, que incluye no solamente el
conjunto ASCII sino tambin carateres especficos de la mayora de los alfabetos. As,
podemos declarar una variable que contenga la letra
int ao=1999;
Se ha de poner nombres significativos a las variables, generalmente formados por varias
palabras combinadas, la primera empieza por minscula, pero las que le siguen llevan la
letra inicial en maysculas. Se debe evitar en todos los casos nombres de variables
cortos como xx, i, etc.
double radioCirculo=3.2;
Las variables son uno de los elementos bsicos de un programa, y se deben
Declarar
Inicializar
Usar
Tipos de datos primitivos
Tipo
Descripcion
boolean Tiene dos valores true o false.
Caracteres Unicode de 16 bits Los caracteres alfa-numricos son los
char
mismos que los ASCII con el bit alto puesto a 0. El intervalo de
valores va desde 0 hasta 65535 (valores de 16-bits sin signo).
Tamao 8 bits. El intervalo de valores va desde -27 hasta 27 -1 (byte
128 a 127)
Existen como vemos en la tabla varios tipos de nmeros enteros (byte, short, int, long),
y tambin existe una clase denominada BigInteger cuyos objetos pueden guardar un nmero
entero arbitrariamente grande.
Variables en coma flotante
Las variables del tipo float o double (coma flotante) se usan para guardar nmeros en
memoria que tienen parte entera y parte decimal.
double PI=3.14159;
double g=9.7805, c=2.9979e8;
gravedad a nivel del mar, el tercero es la velocidad de la luz en m/s, que es la forma de
escribir 2.9979 108. El carcter punto '.', separa la parte entera de la parte decimal,
en vez del carcter coma ',' que usamos habitualmente en nuestro idioma.
Otras ejemplos son los siguientes
float a=12.5f;
float b=7f;
double c=7.0;
double d=7d;
En la primera lnea 12.5 lleva el sufijo f, ya que por defecto 12.5 es double. En la
segunda lnea 7 es un entero y por tanto 7f es un nmero de tipo float. Y as el resto de
los ejemplos.
Conceptualmente, hay infinitos nmeros de valores entre dos nmeros reales. Ya que los
valores de las variables se guardan en un nmero prefijado de bits, algunos valores no se
pueden representar de forma precisa en memoria. Por tanto, los valores de las variables
en coma flotante en un ordenador solamente se aproximan a los verdaderos nmeros reales
en matemticas. La aproximacin es tanto mejor, cuanto mayor sea el tamao de la memoria
que reservamos para guardarlo. De este hecho, surgen las variables del tipo float y
double. Para nmeros de precisin arbitararia se emplea la clase BigDecimal.
Valores constantes
Cuando se declara una variable de tipo final, se ha de inicializar y cualquier intento de
modificarla en el curso de la ejecucin del programa da lugar a un error en tiempo de
compilacin.
Normalmente, las constantes de un programa se suelen poner en letras maysculas, para
distinguirlas de las que no son constantes. He aqu ejemplos de declaracin de
constantes.
final double PI=3.141592653589793;
final int MAX_DATOS=150;
Las cadenas de caracteres o strings
Adems de los ocho tipos de datos primitivos, las variables en Java pueden ser declaradas
para guardar una instancia de una clase, como veremos en el siguiente captulo (Clases y
objetos).
Las cadenas de caracteres o strings son distintas en Java y en el lenguaje C/C++, en este
ltimo, las cadenas son arrays de caracteres terminados en el carcter
'\0'. Sin
embargo, en Java son objetos de la clase String.
String mensaje="El primer programa";
Empleando strings, el primer programa quedara de la forma equivalente
public class PrimeroApp{
public static void main(String[] args) {
//imprime un mensaje
String mensaje="El primer programa";
System.out.println(mensaje);
}
}
En una cadena se pueden insertar caracteres especiales como el carcter tabulador '\t' o
el de nueva lnea '\n'
String texto="Un string con \t un carcter tabulador y \n un salto de lnea";
Palabras reservadas
En el siguiente cuadro se listan las palabras reservadas, aquellas que emplea el lenguaje
Java, y que el programador no puede utilizar como identificadores. Algunas de estas
palabras le resultarn familiares al programador del lenguaje C/C++. Las palabras
reservadas sealadas con un arterisco (*) no se utilizan.
Abstract boolean
break
byte
byvalue*
Case
cast*
catch
char
class
const*
continue
default
do
double
Else
extends
false
final
finally
Float
for
future*
generic*
goto*
If
implements
import
inner*
instanceof
Int
interface
long
native
new
Null
operator*
outer*
package
private
Protected public
rest*
return
short
Satatic
super
switch
synchronized this
Throw
transient
true
try
var*
Void
volatile
while
El cociente entre dos enteros da como resultado un entero. Por ejemplo, al dividir 20
entre 7 nos da como resultado 2.
El operador mdulo da como resultado el resto de la divisin entera. Por ejemplo 20%7 da
como resultado 6 que es el resto de la divisin entre 20 y 7.
El operador mdulo tambin se puede emplear con nmeros reales. Por ejemplo, el cociente
entre 7.5 y 3.0 es 2.5 y el resto es cero, es decir, 7.5=3.0 x 2.5+ 0. El operador
mdulo, funciona de la siguiente forma 7.5=3.0 x 2+1.5, calcula la diferencia entre el
dividendo (7.5) y el producto del divisor (3.0) por la parte entera (2) del cociente,
devolviendo 1.5. As pues, la operacin 7.5%3.0 da como resultado 1.5.
El operador asignacin
Nos habremos dado cuenta que el operador ms importante y ms frecuentemente usado es el
operador asignacin =, que hemos empleado para la inicializacin de las variables. As,
int numero;
numero=20;
la primera sentencia declara una variable entera de tipo int y le da un nombre (numero).
La segunda sentencia usa el operador asignacin para inicializar la variable con el
nmero 20.
Consideremos ahora, la siguiente sentencia.
a=b;
que asigna a a el valor de b. A la izquierda siempre tendremos una variable tal como a,
que recibe valores, a la derecha otra variable b, o expresin que tiene un valor. Por
tanto, tienen sentido las expresiones
a=1234;
double area=calculaArea(radio);
superficie=ancho*alto;
Sin embargo, no tienen sentido las expresiones
1234=a;
calculaArea(radio)=area;
Las asignaciones mltiples son tambin posibles. Por ejemplo, es vlida la sentencia
c=a=b;
//equivalente a c=(a=b);
la cual puede ser empleada para inicializar en la misma lnea varias variables
c=a=b=321;
//asigna 321 a a, b y c
El operador asignacin se puede combinar con los operadores aritmticos
Expresin
Significado
x+=y
x=x+y
x-=y
x=x-y
x*=y
x=x*y
x/=y
x=x/y
As, la sentencia
x=x+23;
evala la expresin x+23, que es asignada de nuevo a x. El compilador lee primero el
contenido de la porcin de memoria nombrada x, realiza la suma, y guarda el resultado en
la misma porcin de memoria. Se puede escribir la sentencia anterior de una forma
equivalente ms simple
x+=23;
Concatenacin de strings
En Java se usa el operador + para concatenar cadenas de carcateres o strings. Veremos en
el siguiente apartado una sentencia como la siguiente:
System.out.println("la temperatura centgrada es "+tC);
El operador + cuando se utiliza con strings y otros objetos, crea un solo string que
contiene la concatenacin de todos sus operandos. Si alguno de los operandos no es una
cadena, se convierte automticamente en una cadena. Por ejemplo, en la sentencia anterior
el nmero del tipo double que guarda la variable tC se convierte en un string que se
aade al string "la temperatura centgrada es ".
Como veremos ms adelante, un objeto se convierte automticamente en un string si su
clase redefine la funcin miembro toString de la clase base Object.
Como vemos en el listado, para mostrar un resultado de una operacin, por ejemplo, la
suma de dos nmeros enteros, escribimos
dato,
que
convierte
cuya codificacin es
tC=(tF-32)*5/9;
nombre
ejemplo
significado
<
menor que
a<b
a es menor que b
>
mayor que
a>b
a es mayor que b
==
igual a
a==b
a es igual a b
!=
no igual a
a!=b
a no es igual a b
<=
a<=5
>=
a>=b
resultado
true
true
true
true
false false
false true
false
resultado
true
true
true
true
false true
false true
true
resultado
true
False
false True
Los operadores AND y OR combinan expresiones relacionales cuyo resultado viene dado por
la ltima columna de sus tablas de verdad. Por ejemplo:
(a<b) && (b<c)
es verdadero (true), si ambas son verdaderas. Si alguna o ambas son falsas el resultado
es falso (false). En cambio, la expresin
(a<b) ||(b<c)
es verdadera si una de las dos comparaciones lo es. Si ambas, son falsas, el resultado es
falso.
La expresin " NO a es menor que b"
!(a<b)
es falsa si (a<b) es verdadero, y es verdadera si la comparacin es falsa. Por tanto, el
operador NOT actuando sobre (a<b) es equivalente a
(a>=b)
La expresin "NO a es igual a b"
!(a==b)
es verdadera si a es distinto de b, y es falsa si a es igual a b. Esta expresin es
equivalente a
(a!=b)
Ejemplo:
package relacion;
public class RelacionApp {
public static void main(String[] args) {
int x=8;
int y=5;
boolean compara=(xy);
System.out.println("x>y es "+compara);
compara=(x==y);
System.out.println("x==y es "+compara);
compara=(x!=y);
System.out.println("x!=y es "+compara);
compara=(x<=y);
System.out.println("x<=y es "+compara);
compara=(x>=y);
System.out.println("x>=y es "+compara);
try {
//espera la pulsacin de una tecla y luego RETORNO
System.in.read();
}catch (Exception e) { }
}
}
= *= /= %=
+= -=
Accin
Parntesis, corchetes y el punto
Cambio signo, Negacin, incremento, decremento
Asignacin de memoria, cambio de tipo
Divisin, multiplicacin, resto de una divisin
Suma y resta
Menor que, mayor que, menor o igual, mayor o igual
Igual a, diferente de
Y lgico
O lgico
Igual, * igual, Division igual, resto igual, suma igual resta
igual
Las dos primeras lneas indican que si la condicin es verdadera se ejecuta la sentencia
1. La palabra clave else, significa que si la condicin no es verdadera se ejecuta la
sentencia 2, tal como se ve en la figura..
Dado que las sentencias pueden ser simples o compuestas la forma general de if...else es
if (condicin){
sentencia1;
sentencia2;
}else{
sentencia3
sentencia4;
sentencia5;
}
Existe una forma abreviada de escribir una sentencia condicional if...else como la
siguiente:
if (numeroBoleto==numeroSoreteo)
premio=1000;
else
premio=0;
en una sola lnea
premio=(numeroBoleto==numeroSoreteo) ? 1000 : 0;
Un ejemplo significativo es el siguiente: el signo de un nmero elevado a una potencia
par es positivo, y es negativo cuando est elevado a una potencia impar.
int signo=(exponente%2==0)?1:-1;
La condicin entre parntesis es la siguiente: un nmero es par, cuando el resto de la
divisin entera de dicho nmero entre dos vale cero.
La sentencia switch
Como podemos ver en la figura del apartado anterior, la sentencia if...else tiene dos
ramas, el programa va por una u otra rama dependiendo del valor verdadero o falso de la
expresin evaluada. A veces, es necesario, elegir entre varias alternativas, como se
muestra en la siguiente figura
switch(expresion){
case valor1:
sentencia1;
break;
//sale de switch
case valor2:
sentencia2;
break;
//sale switch
case valor3:
sentencia3;
break;
//sale de switch
default:
sentencia4;
}
En la sentencia switch, se compara el valor de una variable o el resultado de evaluar una
expresin, con un conjunto de nmeros enteros valor1, valor2, valor3, .. o con un
conjunto de caracteres, cuando coinciden se ejecuta el bloque de sentencias que estn
asociadas con dicho nmero o carcter constante. Dicho bloque de sentencias no est entre
llaves sino que empieza en la palabra reservada case y termina en su asociado break. Si
el compilador no encuentra coincidencia, se ejecuta la sentencia default, si es que est
presente en el cdigo.
Veamos ahora un ejemplo sencillo: dado el nmero que identifica al mes (del 1 al 12)
imprimir el nombre del mes.
public class SwitchApp1 {
public static void main(String[] args) {
int mes=3;
switch (mes) {
case 1: System.out.println("Enero"); break;
case 2: System.out.println("Febrero"); break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("Mayo"); break;
System.out.println("Junio"); break;
System.out.println("Julio"); break;
System.out.println("Agosto"); break;
System.out.println("Septiembre"); break;
System.out.println("Octubre"); break;
System.out.println("Noviembre"); break;
System.out.println("Diciembre"); break;
System.out.println("Este mes no existe"); break;
}
}
}
Ahora un ejemplo ms complicado, escribir un programa que calcule el nmero de das de un
mes determinado cuando se da el ao.
Anotar primero, los meses que tienen 31 das y los que tienen 30 das. El mes de Febrero
(2 mes) es el ms complicado ya que tiene 28 das excepto en los aos que son bisiestos
que tiene 29. Son bisiestos los aos mltiplos de cuatro, que no sean mltiplos de 100,
pero si son bisiestos los mltiplos de 400.
public class SwitchApp2 {
public static void main(String[] args) {
int mes=2;
int ao=1992;
int numDias=30;
switch (mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDias = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDias = 30;
break;
case 2:
if ( ((ao % 4 == 0) && !(ao % 100 == 0)) || (ao % 400 == 0) )
numDias = 29;
else
numDias = 28;
break;
default:
System.out.println("Este mes no existe");
break;
}
System.out.println("El mes "+mes+" del ao "+ao+" tiene "+numDias+" das");
}
}
El primer trmino inicializacin, se usa para inicializar una variable ndice, que
controla el nmero de veces que se ejecutar el bucle. La condicin representa la
condicin que ha de ser satisfecha para que el bucle contine su ejecucin. El incremento
representa la cantidad que se incrementa la variable ndice en cada repeticin.
Ejemplo: Escribir un programa que imprima los primeros 10 primeros nmeros enteros
empezando por el cero
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
El resultado ser: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
La variable ndice i se declara y se inicializa en el trmino inicializacin, la
condicin se expresa de modo que i se debe mantener estrictamente menor que 10; la
variable i se incrementa una unidad en cada repeticin del bucle. La variable i es local
al bucle, por lo que deja de existir una vez que se sale del bucle.
Ejemplo: Escribir un programa que imprima los nmeros pares positivos menores o iguales
que 20
for (int i=2; i <=20; i += 2) {
System.out.println(i);
}
Ejemplo: Escribir un programa que imprima los nmeros pares positivos menores o iguales
que 20 en orden decreciente
for (int i=20; i >= 2; i -= 2) {
System.out.println(i);
}
Ejemplo: Escribir un programa que calcule el factorial de un nmero empleando la
sentencia iterativa for. Guardar el resultado en un nmero entero de tipo long .
Definicin: el factorial de un nmero n es el resultado del producto 1*2*3* .... *(n1)*n.
public class FactorialApp {
public static void main(String[] args) {
int numero=4;
long resultado=1;
for(int i=1; i<=numero; i++){
resultado*=i;
}
System.out.println("El factorial es "+resultado);
Ejemplo: Escribir un programa que imprima los primeros 10 primeros nmeros enteros
empezando por el cero, empleando la sentencia iterativa while.
int i=0;
while (i<10) {
System.out.println(i);
i++;
}
El valor inicial de i es cero, se comprueba la condicin (i<10), la cual resulta
verdadera. Dentro del bucle, se imprime i, y se incrementa la variable contador i, en una
unidad. Cuando i vale 10, la condicin (i<10) resulta falsa y el bucle ya no se ejecuta.
Si el valor inicial de i fuese 10, no se ejecutara el bucle. Por tanto, el bucle while
no se ejecuta si la condicin es falsa.
Ejemplo: escribir un programa que calcule el factorial de un nmero empleando la
sentencia iterativa while
public class FactorialApp1 {
public static void main(String[] args) {
int numero=4;
long resultado=1;
while(numero>0){
resultado*=numero;
numero--;
}
System.out.println("El factorial es "+resultado);
}
}
La sentencia do...while
Como hemos podido apreciar las sentencias for y while la condicin est al
principio del bucle, sin embargo, do...while la condicin est al final
del bucle, por lo que el bucle se ejecuta por lo menos una vez tal como se
ve en la figura. do marca el comienzo del bucle y while el final del
mismo. La forma general es:
do{
sentencia;
}while(condicin);
Ejemplo: Escribir un programa que imprima los primeros 10 primeros nmeros enteros
empezando por el cero, empleando la sentencia iterativa do..while.
int i=0;
do{
System.out.println(i);
i++;
}while(i < 10);
El bucle do...while, se usa menos que el bucle while, ya que habitualmente evaluamos la
expresin que controla el bucle al comienzo, no al final.
La sentencia break
A veces es necesario interrumpir la ejecucin de un bucle for, while, o do...while.
for(int i = 0; i < 10; i++){
if (i == 8)
break;
System.out.println(i);
}
Consideremos de nuevo el ejemplo del bucle for, que imprime los 10 primeros nmeros
enteros, se interrumpe la ejecucin del bucle cuando se cumple la condicin de que la
variable contador i valga 8. El cdigo se leer: "salir del bucle cuando la variable
contador i, sea igual a 8".
Como podemos apreciar, la ejecucin del bucle finaliza prematuramente. Quizs el lector
pueda pensar que esto no es de gran utilidad pues, el cdigo anterior es equivalente a
for(int i = 0; i <=8; i++)
System.out.println(i);
Sin embargo, podemos salir fuera del bucle prematuramente si se cumple alguna condicin
de finalizacin.
while(true){
if (condicionFinal)
break;
//...otras sentencias
}
Como podemos apreciar en esta porcin de cdigo, la expresin en el bucle while es
siempre verdadera, por tanto, tiene que haber algn mecanismo que nos permita salir del
bucle. Si la condicion de finalizacin es verdadera, es decir la variable condicionFinal
del tipo boolean toma el valor true, se sale del bucle, en caso contrario se continua el
procesmiento de los datos.
La sentencia continue
La sentencia continue, fuerza al bucle a comenzar la siguiente iteracin desde el
principio. En la siguiente porcin de cdigo, se imprimen todos los nmeros del 0 al 9
excepto el nmero 8.
for(int i = 0; i < 10; i++){
if (i == 8)
continue;
System.out.println(i);
}
Etiquetas
Con estos mtodos se puede escribir cualquier cadena o dato de los tipos bsicos.
System.out.println(El valor es + una virtud);
Con el operador + se concatenan las dos cadenas y la cadena resultante se enva al buffer
de la pantalla para se visualizada cuando el programa termine. Tambin podemos enviar
constantes o variables de los tipos bsicos, el mtodo se encarga de convertir a cadena
esos datos, por ejemplo:
int p = 60;
System.out.print(Valor de i es: + i);
El contenido de la variable i se convierte a cadena y se concatena con la constante de
cadena.
Java utiliza secuencias de escape
tales como \n (salto de lnea) y \t (tabulador) con
los mtodos print y println.
Entrada:
En Java el objeto System.in esta asociado al flujo estndar de entrada (teclado) el
elemento bsico de este flujo son caracteres y no cadenas como ocurre con out. El mtodo
read( ) retorna el carcter actual en el buffer de entrada:
char c;
c = (char) System.in.read( );
Esto resulta impractico cuando es una lnea de caracteres lo que queremos leer desde
teclado, para ello se utiliza la clase InputStreamReader, de la que se crea un objeto
inicializado con System.in:
InputStreamReader en = new InputStreamReader(System.in);
Una vez creado el
en este se utiliza a su vez como argumento para inicializar otro
objeto de la clase BufferedReader, el cual
permite la entrada de lneas de caracteres
desde el teclado con el mtodo readLine( ):
BufferReader entrada = new BufferedReader (en);
String cd;
System.out.print(Introdusca una cadena por el teclado: );
System.out.flush( );
cd = entrada.readLine( );
el mtodo readLine( ) retorna un objeto cadena con la linea de caracteres leida desde el
teclado; la referencia a ese objeto se asigna a cd, que es una variable de tipo String.
readLine( ) lanza la excepcin IOException. Para evitar error en tiempo de compilacin,
en main( ) se aade throws IOException.
+ suma );
}
}
Con Integer.parseInt( ) se convierte una cadena a un int.
c) Para capturar valores float se hara el siguiente programa:
Class AreaTriangulo {
Public static void main( String[ ] arg ) throws IOException {
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
Float dato;
float base, altura;
System.out.print(Introdusca la base por el teclado: );
System.out.flush( );
dato = Float.ValueOf(entrada.readLine( ));
base = dato.floatValue( );
System.out.print(Introdusca la altura por el teclado: );
System.out.flush( );
dato = Float.ValueOf(entrada.readLine( ));
altura = dato.floatValue( );
System.out.println(Area =
+ base * altura/2 );
+ base * altura/2 );
}
}
Nota:
double d;
float f;
otra forma de realizar la captura de informacin de manera eficiente seria usando lo
siguiente:
d = Double.parseDouble(entrada.readLine( )); // para el caso de un double.
f = Float.parseFloat(entrada.readLine( )); // para el caso de un float.
Estas dos formas simplifican la forma en que se efectuaron las entradas en los ejemplos
anteriores
En la librera java.util disponemos de otra forma de realizar la entrada de datos, la
clase Sccaner proporciona mtodos para leer datos de la entrada estndar (teclado),
referenciada por el mtodo System.in, estos mtodos son:
Scanner(System.in): construye un lector para obtener valore por la entrada estndar
ejemplo:
Sccaner leer = new Sccaner(System.in)
Asociados al objeto leer tenemos los siguientes metodos:
next( ): retorna una cadena, el fin de la cadena se delimita por un espacio en blanco o
un Enter, ejemplo:
String dato = leer.next();
nextLine( ): retorna una cadena, pero a diferencia del anterior, lee del teclado los
caracteres introducidos, inclusive los espacios en blanco, hasta encontrar el Enter.
Ejemplo:
String dato = leer.nextLine( ):
la
Descripcin
Carcter
Enteros
F o f
Reales
Cadenas
Ejemplo
printf(%c, A);
printf(%c
%d,A,(int)A);
printf(%05,45);
printf(%5d,45)
printf(%.2f,45.00);
printf(%.0f,45.00);
printf(%8.2f,145.30);
printf(%8.2f,45.00)
printf(%8s,abc);
printf(%8s,abcde);
printf(%-8s,abc);
printf(%-8s,abcde);
Salida
A
A
65
00045
45
45.00
45
145.30
45.00
abc
abcde
abc
abcde
nombre_mtodo (lista_de_argumento) {
cuerpo del mtodo
}
tipo: especifica el tipo de dato devuelto por el mtodo.
nombre_mtodo: nombre que identifica al mtodo (usar identificador valido).
lista_de_parmetros: es un secuencia de parejas, formadas por el tipo y el identificador
del parmetro separados por comas, son variables que reciben el valor del argumento
pasadas al mtodo cuando este es llamado, si el mtodo no tiene parmetros entonces la
lista ser vaca.
Los mtodos que retornan algn valor deben utilizar return con la siguiente sintaxis:
return; (si
return valor;
no retorna ningn valor)
donde valor es una expresin con el valor que se devuelve, los mtodos en Java siempre se
deben declarar dentro de una clase.
Cuando un programa llama a un mtodo, el control del programa se transfiere al mtodo
llamado. Un mtodo llamado devuelve el control al llamador cuando ejecuta la sentencia
return o cuando se alcanza la llave derecha (}) al final del mtodo.
El siguiente ejemplo crea un programa en el cual se define un mtodo llamado mximo que
ser llamado desde la funcin main( ), este mtodo determinara el mayor de dos nmeros.
import java.io.*;
class prueba_max {
public static void main( String [ ] ar) throws IOException {
BufferedReader
entrada
=
new
BufferedReader(
new
System.in));
int num1, num2, res;
System.out.print(De el numero 1: );
System.out.flush( );
num1 = Integer.parseInt(entrada.readLine( ));
System.out.print(De el numero 2: );
System.out.flush( );
num2 = Integer.parseInt(entrada.readLine( ));
res = maximo(num1, num2);
System.out.println(El mximo valor es: + res);
}
static void mximo(int a, int b) {
if(a > b) return a;
else return b;
}
InputStreamReader(
valor {
public static void main(String [ ] ar)
{
int a = 70;
System.out.println(Valor de a antes de llamar al mtodo: + a);
metodo(a);
System.out.println(Valor de a despus de llamar al mtodo: + a);
}
static void metodo( int x) {
System.out.println(Dentro del mtodo x = + x);
x = 200;
System.out.println(Cambiamos el valor de x ahora es = + x);
}
}
la salida queda as
al ejecutar el programa:
modificar
Sobrecarga de mtodos:
Tcnica mediante la cual dos o mas mtodos dentro de la misma clase tienen el mismo
nombre y las declaraciones de sus parmetros son diferentes. La sobrecarga es uno de los
procedimientos mediante el cual Java implementa el Polimorfismo.
Cuando Java llama un mtodo sobrecargado el compilador determina cual es el mtodo
invocado basndose en el numero
o tipo de argumento pasados; con lo cual los mtodos
sobrecargados deben tener diferentes tipos o numeraos de parmetro, cuando Java encuentra
una llamada a un mtodo sobrecargado, ejecuta la versin
del mtodo cuyos parmetros
coincidan con los argumentos utilizados en la llamada. Ejemplo: se define una clase con
2 mtodos sobrecargados, adicin( ),
diferencindose uno del otro por el numero/tipo
parmetro, el mtodo main( ) llama a los dos mtodos.
Funciones matemticas
Mediante la clase Math se tiene acceso al conjunto de funciones matemticas estndar:
Math.abs( x )
para int, long, float y double Valor Absoluto de un Nro
Math.sin( double )
Retorna el seno de un ngulo en radianes
Math.cos( double )
Retorna el coseno de un ngulo en radianes
Math.tan( double )
Retorna el tangente de un ngulo en radianes
Math.asin( double )
retorna el arcoseno.
Math.acos( double )
retorna el arcocoseno.
Math.atan( double )
retorna el arcotangente.
Math.atan2( double,double )
convierte coodenadas rectangulares a polares
Math.exp( double )
retorna ex
Math.log( double )
retorna el logaritmo de un Nro.
Math.sqrt( double )
retorna la raiz cuadrada de un Nro.
Math.ceil( double )
retorna el valor ms pequeo que es menor o igual al valor dado
Math.floor( double )
retorna el valor ms grande que es menor o igual al valor dado
Math.rint( double )
retorna el redondeo del valor dado
Math.pow( a,b )
retorna ab
Math.round( x )
para double y float
Math.random()
devuelve un double retorna un Nro aleatorio.
Math.max( a,b )
para int, long, float y double retorna el valor mximo entre dos
Nros.
Math.min( a,b ) para int, long, float y double retorna el valor mnimo entre dos Nros.
Math.E
para la base exponencial
Math.PI
para PI
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 );
(tipo [ ] nombre_arreglo;)
El primer formato indica que es arreglo solo el identificador al que siguen los
corchetes(c es un
arreglo de caracteres y a una variable de carcter), el segundo
formato indica que todos los identificadores son arreglos del tipo (tanto p como d y f
serian arreglos de carcter).
Java no permite en la declaracin del arreglo que se indique el tamao del arreglo,
ejemplo:
int num[20]; en este caso se especifica que el arreglo tendr 20 elementos,
esta declaracin seria valida en C pero no en Java, el compilador producira un error.
Para indicar el tamao del arreglo se usa el operador new de la manera siguiente:
float notas [];
notas = new float [20];
primero se declara el arreglo notas de tipo flota y posteriormente se reserva la memoria
suficiente para que le arreglo almacene 20 elementos, esto se podra hacer en una sola
sentencia, as:
float notas [ ] = new float [20];
Atributo length: Java considera cada arreglo un objeto, debido a esto podemos conocer
el numero de elementos de un arreglo a travs de length, usando el siguiente formato:
nombre_variable = nombre_arreglo.length;
ejemplo:
double p [ ] = new double [20];
System.out.println(Tamao del arreglo: + p.length);
se mostrara:
Inicializacin de un arreglo:
Sea int c[ ] = new int [5]; para asignar valores a cada elemento del arreglo c se puede
escribir:
c[0] = 6;
c[1] = 3;
c[2] = -2;
c[3] = 40;
c[4] = 16;
la primera sentencia fija el valor de c[0] en 6, la segunda el valor de c[1] en 3 y asi
sucesivamente. Otra forma es asignar los valores en el momento en que se inicializa el
arreglo:
as:
asignacin el
= tabla[1][0]
j;
= tabla[1][1]
2;
= tabla[1][2]
#;
=
=
=
a es un arreglo de carteres.
String b = Caracas,
compareTo( ):
equals( ):
equalsIgnoreCase(
):
toUpperCase( ):
toLowerCase( ):
trim( ):
replace( ):
toCharArray( ):
Accin
a.length retorna el numero de caracteres de la
cadena a
a.concat(b) aade la cadena b al final de la
cadena a
a.charAt(2) retorna el carcter que esta en la
posicin indicada (2) en la cadena a.
a.getChar(2,6,b,2) a partir de la posicin 2 de
la cadena a se extraen 6 caracteres los cuales se
almacenan en b a partir de la posicin 2.
b = a.substring(3,7) retorna todos los
caracteres que estn entre la posicin 3 y 7
menos uno de la cadena a. Si indicamos
a.substring(3) extrae caracteres desde la
posicin hasta el final de la cadena.
a.compareTo(b) compara la cadena con la cadena b
y retorna un valor entero igual a:
cero; si son iguales a y b
alfabticamente.
menor que cero; si a es menor
alfabticamente que b.
mayor que cero; si a es mayor
alfabticamente que b.
a.equals(b) devuelve true si a y b son iguales
alfabticamente tiene en cuenta las maysculas y
minsculas.
a.equalsIgnoreCase(b) devuelve true si a y b son
iguales alfabticamente no toma en cuenta las
maysculas y minsculas.
a = a.toUpperCase(a) devuelve una cadena con
todos los caracteres en mayscula.
a = a.toLowerCase(a) devuelve una cadena con
todos los caracteres en minscula.
b = a.trim( ) devuelve una cadena sin los
espacios en blanco que se encuentren al principio
o al final de la cadena a, ejemplo:
El
Corsario
trim -> El Corsario.
b = a.replace(a, #) devuelve una cadena en
la cual se a sustituido el carcter a por el
carcter #, ejemplo: La venta fue mala
replace -> L# vent# fue m#l#.
char [] c = a.toCharArray( ) devuelve un arreglo
con los caracteres de la cadena a.
Escribir un programa que llame a un mtodo que determine cuantas palabras hay en una
cadena leda por el teclado.
import java.io.*;
class cuenta_blancos
{
public static void main(String [] ar) throws IOException
Significado
Desbordamiento de memoria o divisin por cero.
Conversin ilegal de una cadena a un tipo numrico.
Acceso a un elemento inexistente en un vector o en una
cadena.
Intento de creacin de un vector de longitud negativa.
Intento de uso de una referencia nula.