Termes les plus recherchés
[PDF](+35👁️) Télécharger Java BAsico pdf
Libro de JavaTélécharger gratuit Java BAsico pdf
Tutorial
basico de Java
Version 3.0
Sola una tecnolagia puede impulsar
todos estos dispositivos
Y esl:e tutorial puede ayudarte ■
dar tu5 primeros pasos en ella
Copyright
Copyright (c) 2007, Abraham Otero. Este documento puede ser distribuido solo bajo los terminos y condiciones de la
licencia de Documentacion de javaHispano vl.O o posterior (la ultima version se encuentra en
http://www.iavahispano.orq/licenciasO .
Para cualquier duda, consulta, insulto o tiron de orejas sobre este tutorial dirigirse a abrahamQjavahispano.orq .
Java2, tutorial de javahispano (http://iavahispano.orq'). Paqina 2 de 148
INDICE:
1 Java, el LENGUAJE 5
1.1 INTRODUCCION 5
1.2 Caracteristicas de Java 6
1.2.1 Simple 6
1.2.2 Orientado a Objetos 6
1.1.1 Distribuido 6
1.1.2 Robusto 6
1.1.3 Seguro 6
1.1.4 Portable 7
1.1.5 Arquitectura Neutral 7
1.1.6 Rendimiento medio 7
1.1.7 Multithread 8
1.2 Java frente a los demas lenguajes 8
2 J2SdK, Java 2 Standard Development Kit 9
2.1 Javac 9
2.2 Java 9
2.3 appletviewer 10
2.4 JAVADOC 10
3 tipos de datos PRIMITIVOS en Java 12
3.1 Tipos de datos 12
3.1.1 Enteros 12
3.1.2 Reales 13
3.1.3 Caracteres 13
3.1.4 Boolean 13
3.2 DEFINICION de Variables 14
3.3 Conversion entre tipos numericos 15
3.4 Operadores 16
3.4.1 Exponenciacion 17
3.4.2 Operadores logicos 18
3.5 Cadenas de caracteres 20
3.5.1 Concatenacion 20
3.5.2 Subcadenas 21
3.5.3 Comparacion de cadenas 22
3.6 Ambito de las variables 23
3.7 ARRAYS 24
3.8 Tipo enumerados 25
3.9 Java no es perf ecto 26
4 Control de flujo en Java 28
4.1 Sentencias Condicionales 28
4.1.1 If then Else 28
4.1.2 Switch 30
4.2 Bucles 32
4.2.1 Bucle while 32
4.2.2 Bucle do while 32
4.2.3 Bucle for 33
4.2.4 Bucle for-each 34
Java2, tutorial de javahispano (http://iavahispano.orq'). Paqina 3 de 148
4.2.5 Break y continue 35
4.3 return 36
5 Objetos y closes 37
5.1 Introduccion 37
5.2 Clases y herencia 38
5.2.1 Definicion de una clase 39
5.2.2 Modificadores de metodos y variables 42
5.2.3 Herencia 45
5.2.4 Creacion y referencia a objetos 50
5.2.5 this 52
5.2.6 super 53
5.3 Interfaces 53
5.4 Nuestro primer Programa orientado a objetos 57
5.5 Aprendiendo a usar los paquetes 66
5.5.1 Un ejemplo de codigo con paquetes 70
5.6 El ejemplo de los marcianos con paquetes 77
6 Programacion grdfica con swing 85
6.1 JFrame 86
6.2 Eventos 87
6.2.1 tQue es un evento? 87
6.2.2 El modelo de delegacion de eventos 88
6.2.3 Un frame que se cierra 92
6.3 JPanel 94
6.4 Layaout 96
6.4.1 FlowLayout 98
6.4.2 GridLayout 99
6.4.3 BorderLayout 101
6.5 JButton 103
6.6 Dibujar en una ventana 108
6.6.1 Empezando a dibujar 109
6.6.2 El metodo paintComponent Ill
6.7 Revision de algunos componentes de Swing 114
6.7.1 JTextField 114
6.7.2 JTextArea 114
6.7.3 JPasswordField 115
6.7.4 JScroUBar 115
6.7.5 JLabel 115
6.7.6 JCheckBox 116
6.7.7 JRadioButton 116
6.7.8 JList 116
6.7.9 JComboBox 117
6.7.10 JMenu 117
7 JApplet 118
7.1 Como convertir una aplicacion en un applet 118
7.2 Ciclo de vida de un applet 121
8 Threads 122
8.1 liue es un thread? 122
8.2 La vida de un thread 123
8.2.1 Recien nacido: 123
Java2, tutorial de javahispano (http://iavahispano.orq'). Paqina4de 148
8.2.2 Ejecutable: 124
8.2.3 Corriendo 124
8.2.4 Bloqueado 124
8.2.5 Muerto 124
8.3 Threads en Java 125
8.4 Un programa sin threads 126
8.5 Un programa con threads 130
9 Apendice A : mejoras al codigo de la guerra 142
10 Apendice B: lUSO IDE para aprender Java? ^Cual? 143
10.1 BlueJ http://www.bluej.org/ 143
10.2 JCreator http://www.jcreator.com/ 144
10.3 JBuilder http://www.codegear.com/tabid/102/Default.aspx 144
10.4 NetBeans http://www.netbeans.org/ 145
10.5 Eclipse http://www.eclipse.org/ 145
11 Apendice C: Convenios de nomenclatura en Java 147
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 5 de 148
1 Java, el LENGUAJE
1.1 INTRODUCCION
Estamos en unos dias en Ids que cada vez mas la informatica invade mas campos de nuestra
vida, estando el ciudadano medio cada vez mas familiarizado con terminos del mundo
informatico, entre ellos, como no, los lenguajes de programacion. A cualquier persona que
haya empleado alguna vez un ordenador le resultara familiar alguno de estos nombres: C,
Pascal, Cobol, Visual Basic, Java, Fortran y a una persona ya mas introducida en ese
mundillo posiblemente haya oido muchos otros: Oak, Prolog, Dbase, JavaScrip, Delphi,
Simula, Smalltalk, Modula, Oberon, Ada, BCPL, Common LISP, Scheme... En la actualidad se
podrian recopilar del orden de varios cientos de lenguajes de programacion distintos, sino
miles.
Cabe hacerse una pregunta: iPara que tanto lenguaje de programacion?. Toda esta multitud
de nombres puede confundir a cualquier no iniciado que haya decidido aprender un
lenguaje, quien tras ver las posibles alternativas no sabe cual escoger, al menos entre los del
primer grupo, que por ser mas conocidos deben estar mas extendidos.
El motivo de esta disparidad de lenguajes es que cada uno ha sido creado para una
determinada funcion, esta especialmente disenado para facilitar la programacion de un
determinado tipo de problemas, para garantizar seguridad de las aplicaciones, para obtener
una mayor facilidad de programacion, para conseguir un mayor aprovechamiento de los
recursos del ordenador... Estos objetivos son muchos de ellos excluyentes: el adaptar un
lenguaje a un tipo de problemas hara mas complicado abordar mediante este lenguaje la
programacion de otros problemas distintos de aquellos para los que fue disenado. El facilitar
el aprendizaje al programador disminuye el rendimiento y aprovechamiento de los recursos
del ordenador por parte de las aplicaciones programadas en este lenguaje; mientras que
primar el rendimiento y aprovechamiento de los recursos del ordenador dificulta la labor del
programador.
La pregunta que viene a continuacion es evidente: ^Para que fue pensado Java?.
A esto responderemos en el siguiente apartado.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 6 de 148
1.2 Caracterfsticas de Java
A continuacion haremos una pequena redaccion de las caracterfsticas del lenguaje, que nos
ayudaran a ver para que tipo de problemas esta pensado Java:
1.2.1 Simple
Es un lenguaje sencillo de aprender. Su sintaxis es la de C++ "simplificada". Los creadores de
Java partieron de la sintaxis de C++ y trataron de eliminar de este todo lo que resultase
complicado o fuente de errores en este lenguaje. La herencia multiple, la aritmetica de
punteros, por la gestion de memoria dinamica (que en Java se elimina de modo transparente
para el programador gracias al recogedor basura) son ejemplos de "tareas complicadas" de
C++ y en Java se han eliminado poco simplificado.
1.2.2 Orientado a Objetos
Posiblemente sea el lenguaje mas orientado a objetos de todos los existentes; en Java todo, a
excepcion de los tipos fundamentales de variables (int, char, long...) es un objeto.
1.1.1 Distribuido
Java esta muy orientado al trabajo en red, soportando protocolos como TCP/IP, UDP, HTTP y
FTP. Por otro lado el uso de estos protocolos es bastante sencillo comparandolo con otros
lenguajes que los soportan.
1.1.2 Robusto
El compilador Java detecta muchos errores que otros compiladores solo detectarian en tiempo
de ejecucion o incluso nunca. A esclarecer asi por ejempio " if(a = b) then ... " o " int i; h = i*2; "
son dos ejemplos en los que el compilador Java no nos dejaria compilar este codigo; sin
embargo un compilador C compilaria el codigo y generaria un ejecutable que ejecutaria esta
sentencia sin dar ningun tipo de error).
1.1.3 Seguro
Sobre todo un tipo de desarrollo: los Applet. Estos son programas disenados para ser
ejecutados en una pagina web. Java garantiza que ningun Applet puede escribir o leer de
nuestro disco o mandar informacion del usuario que accede a la pagina a traves de la red
(como, por ejempio, la direccion de correo electronico). En general no permite realizar
cualquier accion que pudiera danar la maquina o violar la intimidad del que visita la pagina
web.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 7 de 148
1.1. 4 Portable
En Java no hay aspectos dependientes de la implementacion, todas las implementaciones de
Java siguen los mismos estandares en cuanto a tamano y almacenamiento de los datos.
Esto no ocurre asi en C++, por ejemplo. En este un entero, por ejempio, puede tener un
tamano de 16, 32 o mas bits, siendo lo unica limitacion que el entero sea mayor que un short
y menor que un long int. Asi mismo C++ bajo UNIX almacena los datos en formato little
endian, mientas que bajo Windows lo hace en big endian. Java lo hace siempre en little edian
para evitar confusiones.
1.1.5 Arquitectura Neutral
El codigo generado por el compilador Java es independiente de la arquitectura: podria
ejecutarse en un entorno UNIX, Mac o Windows. El motivo de esto es que el que realmente
ejecuta el codigo generado por el compilador no es el procesador del ordenador
directamente, sino que este se ejecuta mediante una maquina virtual. Esto permite que los
Applets de una web pueda ejecutarlos cualquier maquina que se conecte a ella
independientemente de que sistema operativo emplee (siempre y cuando el ordenador en
cuestion tenga instalada una maquina virtual de Java).
1.1.6 Rendimiento medio
Actualmente la velocidad de procesado del codigo Java es semejante a la de C++, hay ciertos
pruebas estandares de comparacion (benchmarks) en las que Java gana a C++ y viceversa.
Esto es asi gracias al uso de compiladores just in time, compiladores que traduce los
bytecodes de Java en codigo para una determinada CPU, que no precisa de la maquina virtual
para ser ejecutado, y guardan el resultado de dicha conversion, volviendolo a llamar en caso de
volverlo a necesitar, con lo que se evita la sobrecarga de trabajo asociada a la interpretacion
del bytecode.
No obstante por norma general el programa Java consume bastante mas memoria que el
programa C++, ya que no solo ha de cargar en memoria los recursos necesario para la
ejecucion del programa, sino que ademas debe simular un sistema operativo y hardware
virtuales (la maquina virtual). Por otro lado la programacion grafica empleando las librerias
Swing es mas lenta que el uso de componentes nativos en las interfaces de usuario.
En general en Java se ha sacrificado el rendimiento para facilitar la programacion y sobre todo
para conseguir la caracteristica de neutralidad arquitectural, si bien es cierto que los avances
en las maquinas virtuales remedian cada vez mas estas decisiones de diseno.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 8 de 148
1.1.7 Multithread
Soporta de mode native los threads, sin necesidad del use de de librerias especificas (como es
el case de C++). Esto le permite ademas que cada Thread de una aplicacion Java pueda correr
en una CPU distinta, si la aplicacion se ejecuta en una maquina que posee varias CPU. Las
aplicaciones de C++ no son capaces de distribuir, de modo transparente para el
programador, la carga entre varias CPU.
1.2 JAVA FRENTE A LOS DEMAS LENGUAJES
Java es un lenguaje relativamente moderno. Su primer uso en una "tarea seria" de
programacion fue la construccion del navegador HotJava por parte de la empresa Sun en
mayo de 1 995, y fue a principios de 1 996 cuando Sun distribuye la primera version de Java. Es
esta corta edad lo que hace que Java este mas orientado al mundo web, que no existia
cuando, por ejempio, C fue desarrollado.
Tambien es esto lo que ha hecho que soporte de modo nativo (no mediante el uso de
librerias, como C) los threads, siendo posible aprovechar las ventajas de los sistemas
multiprocesadores.
Las ventajas fundamentales de Java frente a otros lenguajes son el menor periodo de
aprendizaje por parte del programador, llegando a ser un programador productive en menos
tiempo (sencillez) y siendo posible desarrollar aplicaciones mas rapido que en otros lenguajes
(sencillez y robustez), lo cual se traduce en el mundo empresarial en un ahorro de costes.
Sus cualidades de distribuido, seguro e independencia de la plataforma lo hacen ideal para
aplicaciones relacionadas con el mundo web; precisamente a esto es a lo que Java debe su
gran difusion y fama. El hecho de que sea independiente de la maquina y del sistema
operative permite que distintas maquinas con distintos sistemas operatives se conecten a una
misma pagina web y ejecuten los mismes applets. Ademas la seguridad que garantiza Java
para los applets impiden que alguien trate de averiguar infermacion sebre los usuaries que se
conectan a la pagina web o intente danar sus maquinas.
En cuanto a su capacidad de soporte de threads y su capacidad de sacarle partido a sistemas
multiprocesador lo convierten en un lenguaje mas "orientado hacia el futuro ". Estas
cualidades podrian dar pie a que algun dia los rendimientos computacionales de Java sean
comparables con los de C++ y otros lenguajes que hoy son computacionalmente mas
eficientes.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 9 de 148
2 J2SDK, JAVA 2 STANDARD DEVELOPMENT
KIT
En este capitulo haremos un breve repaso del entorno de programacion distribuido por
Sun, jdk. Dicho entorno de programacion es suministrado por Sun de forma gratuita,
pudiendose encontrar en la direccion web: http://Java.sun.com/j2se/.
Es de consenso que el entorno jdk no es el ma ha dado s adecuado para el desarrollo de
aplicaciones Java, debido a funcionar unica y exclusivamente mediante comandos de consola,
ya que hoy en dia la programacion se suele ayudar de entornos visuales, como JBuilder,
JCreator o muchos otros, que facilitan enormemente la tarea (ver apendice B). Sin embargo,
puede ser un entorno bastante util para aprender el lenguaje, ya que aunque los entornos
visuales nos hagan mucho trabajo siempre es necesario ir al codigo para modificarlo y obtener
el comportamiento deseado, lo cual quiere decir que necesitamos dominar el lenguaje y es
mas facil llegar a este dominio escribiendo codigos completes en un entorno "hostil" que no
nos ayuda, que simplemente remodelando codigos ya generados por entornos visuales.
2.1 JAVAC
Es el comando compilador de Java. Su sintaxis es:
I javac ejemplo. Java
La entrada de este comando ha de ser necesariamente un fichero que contenga codigo escrito
en lenguaje Java y con extension .Java. El comando nos creara un fichero .class por cada clase
que contenga el fichero Java (en el tema 5 se explicara que es una clase).
Los ficheros .class contienen codigo bytecode, el codigo que es interpretado por la maquina
virtual Java.
2.2 JAVA
Es el interprete de Java. Permite ejecutar aplicaciones que previamente hayan sido compiladas
y transformadas en ficheros .class. Su sintaxis es:
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 10 de 148
I Java ejemplo
No es necesario aqui suministrar la extension del fichero, ya que siempre ha de ser un fichero
.class.
2.3 APPLETVIEWER
Se trata de un comando que verifica el comportamiento de un applet. La entrada del
comando ha de ser una pagina web que contenga una referenda al applet que deseamos
probar. Su sintaxis es:
I Appletviewer mipagina.html
El comando ignora todo el contenido de la pagina web que no sean applets y se limita a
ejecutarlos. Un ejemplo de pagina web "minima" para poder probar un applet llamado
myapplet. class seria:
<HTML>
<TITLE>My Applet </TITLE>
<BODY>
<APPLET CODE="myapplet. class" WIDTH=180 HEIGHT=180>
</APPLET>
</BODY>
</HTML>
2.4 JAVADOC
Este util comando permite generar documentacion en formato html sobre el contenido de
ficheros con extension .Java. Su sintaxis es:
I javadoc ejemplo. Java
En la documentacion generada por este comando se puede ver que metodos y constructores
posee una determinada clase, junto con comentarios sobre su uso, si posee inner classes, la
version y el autor de la clase....
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 11 de 148
Una explicacion detallada de la sintaxis de los comentarios de javadoc, que aqui no
abordaremos, se encuentra el capitulo 2 pagina 122 del libro Thinking in Java de Bruce Eckel
(http://www.bruceeckel.com/ ) .
A continuacion suministramos el codigo Java de un ejempio
//: c02:HelloDate. Java
import java.util.*;
/**Displays a string and today's date.
* @author Bruce Eckel
* @author www.BruceEckel.com
* ©version 2.0
*/
public class HelloDate {
/** Sole entry point to class & application
* §param args array of string arguments
* ©return No return value
* ©exception exceptions No exceptions thrown
*/
public static void main(String[] args) {
//Esta linea imprime por consola la cadena de caracteres
//"Hello it's"
System. out . println("Hello, it's: ");
//Esta sentencia imprime la fecha actual del equipo
System. out . println(new Date());
}
} ///:-
Java2, tutorial de javahispano ('http://iavahispano.orq').
Paqinal2de 148
3 TIPOS DE DATOS PRIMITIVOS EN JAVA
En este tema trataremos las estructuras basicas de Java de dates, sus tipos y las variables,
operadores. Aquellos que esten familiarizados con C, o C++, no encontraran practicamente
nada nuevo en este tema, ya que, como se ha dicho en el primer tema, Java hereda toda su
sintaxis de C, pudiendo considerarse la sintaxis de Java una version simplificada de la de C.
Solo las operaciones con Strings pueden resultar un poco novedosas.
3.1 TIPOS DE DATOS
En Java toda variable declarada ha de tener su tipo, y ademas antes de poder emplearia
hemos de inicializaria a un valor, si no es compilador se quejara y no generara los archives
.class. Esto por ejempio en C no es necesario, siendo fuente de muchos errores al emplearse
en operaciones variables que nos hemos olvidado de inicializar. A continuacion pasamos a
describir los tipos de datos:
3.1.1 Enteros
Almacenan como su propio nombre indica numeros enteros, sin parte decimal. Cabe destacar,
como ya se indico en el primer tema, que por razones de portabilidad todos los datos en Java
tienen el mismo tamano y formato. En Java hay cuatro tipos de enteros:
Tabia 1: tipo de datos enteros en Java
Tipo
Tamano (bytes)
Rango
Byte
1
-128 a 127
Short
2
-32768 a 32767
Int
4
-2147483648 a 2147483647
Long
8
-9223372036854775808 a
9223372036854775807
Para indicar que una constante es de tipo long lo indicaremos con una L: 23L.
Java2, tutorial de javahispano ('http://iavahispano.orq').
Paqina 13 de 148
3.1.2 Reales
Almacenan numero reales, es decir numeros con parte fraccionaria. Hay dos tipos:
Tabia 2: tipos de datos reales en Java
Tipo
Tamano (bytes)
Rango
Float
4
+ 3.40282347E+38
Double
8
+ 179769313486231570E+308
Si queremos indicar que una constante es flotante: ej: 2.3 hemos de escribir: 2.3F, sino por
defecto sera double.
3.1.3 Caracteres
En Java hay un unico tipo de caracter: char. Cada caracter en Java esta codificado en un
formato denominado Unicode, en este formato cada caracter ocupa dos bytes, frente a la
codificacion en ASCII, donde cada caracter ocupaba un solo byte.
Unicode es una extension de ASCII, ya que este ultimo al emplear un byte por caracter solo
daba acogida a 256 simbolos distintos. Para poder aceptar todos los alfabetos (chino,
japones, ruso...) y una mayor cantidad de simbolos se creo el formato Unicode.
En Java al igual que en C se distingue la representacion de los datos char frente a las cadenas
de caracteres. Los char van entre comillas simples: char ch = 'a', mientras que las cadenas de
caracteres usan comillas dobles.
3. 1.4 Boolean
Se trata de un tipo de dato que solo puede tomar dos valores: "true" y "false". Es un tipo de
dato bastante util a la hora de realizar chequeos sobre condiciones. En C no hay un dato
equivalente y para suplir su ausencia muchas veces se emplean enteros con valor 1 si "true" y
si "false". Otros lenguajes como Pascal si tiene este tipo de dato.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 14 de 148
3.2 DEFINICION DE VARIABLES
A! igual que C, Java requiere que se declarer! los tipos de todas las variables empleadas. La
sintaxis de iniciacion es la misma que C:
I int i;
Sin embargo, y a diferencia que en C, se requiere inicializar todas las variables antes de
usarlas, si no el compilador genera un error y aborta la compilacion. Se puede inicializar y
asignar valor a una variable en una misma linea:
I int i = 0;
Asignacion e inicializacion pueden hacerse en lineas diferentes:
int i ;
i = 0;
Es posible iniciar varias variables en una linea:
I int i, j,k;
Despues de cada linea de codigo, bien sea de iniciacion o de codigo, al igual que en C va un ;.
En Java, al igual que en todo lenguaje de programacion hay una serie de palabras reservadas
que no pueden ser empleadas como nombres de variables (if, int, char, else, goto....); alguna
de estas se emplean en la sintaxis del lenguaje, otras, como goto no se emplean en la
actualidad pero se han reservado por motivos de compatibilidad por si se emplean en el
futuro.
Los caracteres aceptados en el nombre de una variable son los comprendidos entre "A-Z", "a-
z", _, $ y cualquier caracter que sea una letra en algun idioma.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 15 de 148
3.3 CONVERSION ENTRE TIPOS NUMERICOS
Las normas de conversion entre tipos numericos son las habituales en un lenguaje de
programacion: si en una operacion se involucran varios datos numericos de distintos tipos
todos ellos se convierten al tipo de dato que permite una mayor precision y rango de
representacion numerica; asi, por ejempio:
-Si cualquier operando es double todos se convertiran en double.
-Si cualquier operando es float y no hay ningun double todos se convertiran a float.
-Si cualquier operando es long y no hay datos reales todos se convertiran en long.
-Si cualquier operando es int y no hay datos reales todos ni long se convertiran en int.
-En cualquier otro caso el resultado sera tambien un int.
Java solo tiene dos tipos de operadores enteros: uno que aplica para operar datos de tipo
long, y otro que emplea para operar datos de tipo int. De este modo cuando operemos un
byte con un byte, un short con un short o un short con un byte Java empleara para dicha
operacion el operador de los datos tipo int, por lo que el resultado de dicha operacion sera un
int siempre.
La "jerarquia" en las conversiones de mayor a menor es:
double <- float <- long <- int <- short <- byte
Estas conversiones solo nos preocuparan a la hora de mirar en que tipo de variable
guardamos el resultado de la operacion; esta ha de ser de una jerarquia mayor o igual a la
jerarquia de la maxima variable involucrada en la operacion. Si es de rango superior no habra
problemas.
Es posible convertir un dato de jerarquia "superior" a uno con jerarquia "inferior",
arriesgandonos a perder informacion en el cambio. Este tipo de operacion (almacenar el
contenido de una variable de jerarquia superior en una de jerarquia inferior) se denomina
cast. Veamos una ejempio para comprender su sintaxis:
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 16 de 148
public class Ejemplol {
public static void main(String[] args) {
int i = 9,k;
float j = 47. 9F;
System. out .println("i: "+i + " j: " + j ) ;
k = (int)j; //empleo de un cast
System. out .println("j : " + j + " k: " +k);
j = k;//no necesita cast
System. out .println("j : " + j + " k: " +k);
float m = 2.3F;
//float m = 2.3; daria error al compilar.
System. out . println("m: "+m);
}
} ///:-
3.4 OPERADORES
Los operadores basicos de Java son + ,-,*,/ para suma, resta, producto y division. El
operador / representa la division de enteros si ambos operandos son enteros. Su modulo
puede obtenerse mediante el operador % (7/4= 1; 7% 4=3).
Ademas existen los operadores decremento e incremento: -- y ++ respectivamente. La
operacion que realizan son incrementar y decrementar en una unidad a la variable a la que se
aplican. Su accion es distinta segun se apliquen antes (++a) o despues (a + +) de la variable.
El siguiente programa ilustra estos distintos efectos:
public class Ejemplo2{
public static void main(String[] args) {
int i = 1;
prt("i : " + i);
prt("++i : " + ++i); // Pre-incremento, primero
//incrementa y luego imprime por consola
prt("i++ : " + i++); // Post-incremento, primero imprime
//"2" por consola y luego incrementa i.
prt("i : " + i);//i por lo tanto vale 3
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 17 de 148
prt("--i : " + --i); // Pre-decremento, primero
//decrementa i y luego lo imprime por consola
prt("i-- : " + i--); // Post-decremento, primero imprime
//i por consola y luego de decrementa.
prt("i : " + i);//Ahora i vale 1
}
//esto nos ahorrara teclear. Invocando a prt podremos
//imprimir por consola la cadena de caracteres que le pasemos
static void prt(String s) {
System. out . print In (s) ;
}
} ///:-
3.4. 1 Exponenciacion
En Java a diferencia que en otros lenguajes no existe el operador exponenciacion. Tampoco
existen los operadores Seno o Coseno. Si se desea realizar una operacion de exponenciacion
se debera invocar el metodo correspondiente de la clase Math de Java.lang. Estos metodos
son estaticos, por lo que no es necesario crear un objeto de dicha clase. Su sintaxis general es:
I Math .metodo(argumentos) ;
En el siguiente codigo aparecen ejemplos. Si alguna vez deseamos realizar algun otro tipo de
operacion y queremos ver si la soporta Java podemos hacerlo consultando la ayuda on-line de
la clase Math, o bien la documentacion que podemos descargar los desde la misma pagina
que el jdk.
public class EjemploS {
public static void main(String[] args) {
int i = 45,j=2;
//Imprime por consola la cadena de caracteres "Cos i : "
//concatenado con el resultado de calcular el coseno de i
prt("Cos i : " + Math . cos(i) ) ;
prt("Sen i : " + Math . sin(i) ) ;
Java2, tutorial de javahispano ('http://iavahispano.orq').
Paqina 18 de 148
prtC'jAi : " + Math.pow(j,i));
}
//esto nos ahorrara teclear
static void prt(String s) {
System. out . print In (s) ;
}
} ///:-
3.4.2 Operadores logicos
En la tabia a continuacion recogemos los operadores logicos disponibles en Java:
Tabia 3: operadores logicos
Operador
Operacion que realiza
!
Not logico
= =
Test de igualdad
! =
Test de desigualdad
<
Menor que
>
Mayor que
< =
Menor o igual que
> =
Mayor o igual que
&&
And logico
II
Or logico
Java2, tutorial de javahispano (http://iavahispano.orq'). Paqina 19 de 148
Con el siguiente ejempio se muestra la funcion de estos operadores:
import java.util.*;
public class Ejemplo4 {
public static void main(String[] args) {
//Creamos un objeto de tipo Random, almecenado un puntero a
//el en la variable rand. En el tema 5 se detallara como se
//crean objetos.
Random rand = new Random();
//el metodo nextlnt() del objeto Random creado (se invoca
//como rand . nextlntO ) genera un numero aleatorio entero. En
//el tema 5 se explica que son los metodos y como emplearlos.
//El modulo 100 de un entero aleatorio sera un entero
//aleatorio entre y 100.
int i = rand.nextlntO % 100;
int j = rand.nextlntO % 100;
//Imprime I y j por consola
prt("i = " + i);
prtC'j = " + j);
//Imprime diversas operaciones binarias sobre i y j, junto
//con su resultado.
prt("i > j es " + (i > j));
prt("i < j es " + (i < j));
prt("i >= j es " + (i >= j));
prt("i <= j es " + (i <= j));
prtC'i == j es " + (i == j));
prt("i 1= j es " + (i != j));
prt("(i < 10) && (j < 10) es "
+ ((i < 10) && (j < 10)) );
prt("(i < 10) II (j < 10) es "
+ ((i < 10) II (j < 10)) );
}
static void prt(String s) {
System. out . print In (s) ;
}
} ///:-
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 20 de 148
Una posible salida de este programa es:
i = 85
j = 4
i > j es true
i < j es false
i >= j es true
i <= j es false
i == j es false
i != j es true
//true && false = false
(i < 10) && (j < 10) es false
//true I I false = true
(i < 10) II (j < 10) es true
3.5 CADENAS DE CARACTERES
En Java no hay un tipo predefinido para cadenas de caracteres, en su lugar hay una clase.
String, que es la que soporta las distintas operaciones con cadenas de caracteres. La
definicion de un String es:
String e ; //no inicializado
String e =""; //cadena vacia
String e = "Hola"; //inicializacion y asignacion juntas,
A continuacion veremos algunas operaciones basicas soportadas por la clase String:
3.5.1 Concatenacion
La concatenacion en Java es increiblemente sencilla: se realiza con el operador +, es decir
"sumando" cadenas de caracteres obtenemos la concatenacion de estas. Lo ilustraremos con
un ejempio:
String saludo = "hola";
String nombre = "Pepe";
String saluda_pepe = ""
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 21 de 148
saluda_pepe = saludo + nombre;// saluda_pepe toma el valor
holaPepe
La sencillez de Java en el manejo de cadenas de caracteres Mega incluso mas alia: si una
cadena la intentamos encadenar con otro tipo de variable automaticamente se convierte la
otra variable a String, de tal modo que es perfectamente correcto:
String saludo = "hola";
int n = 5;
saludo = saludo + " " + n;// saludo toma el valor "hola 5"
3.5.2 Subcadenas
En la clase String hay un metodo que permite la extraccion de una subcadena de caracteres
de otra. Su sintaxis es:
Nombre_String . substring( (int)posici6n_inicial, (int)posici6n_f
inal) ;
Donde posicionjnicial y posici6n_final son respectivamente la posicion del primer caracter
que se desea extraer y del primer caracter que ya no se desea extraer.
String saludo = "hola";
String subsaludo = "";
Subsaludo = saludo. substring(0, 2) ;// subsaludo toma el
valor "ho"
Puede extraerse un char de una cadena, para ello se emplea el metodo charAt(posici6n),
siendo posicion la posicion del caracter que se desea extraer.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 22 de 148
3.5.3 Comparacion de cadenas
Se empleo otro metodo de String: equals. Su sintaxis es:
I cadenal.equals(cadena2) ;
Devuelve true si son iguales y false si son distintos.
El siguiente ejempio permitira ilustrar estas operaciones con Strings:
public class EjemploS {
public static void main(String[] args) {
String saludo = "Hola";
String saludo2 ="hola";
int n = 5;
//Imprime por consola la subcadena formada por los caracteres
//comprendidos entre el caractero de saludo y hasta el
//caracter 2, sin incluir el ultimo
prt( saludo . substring (0,2) ) ;
//Concatena saludo con un espacio en bianco y con el valor de
//la variable n
prt(saludo +" " + n);
//Imprime el resultado del test de igualdad entre saludo y
//saludo2. Son distintos, en Java se distingue entre
//mayusculas y minusculas.
prt("saludo == saludo2 "+ saludo .equals(saludo2) ) ;
}
static void prt(String s) {
System. out . print In (s) ;
}
}
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 23 de 148
3.6 AMBITO DE LAS VARIABLES
En este apartado vamos a tratar de ver cual es el ambito de validez de una variable. Este en
Java viene dado per Ids corchetes: {}; una vez definida una variable en un codigo dejara de
existir cuando se acabe el bloque de codigo en el que se definio. Los bloques de codigo
empiezan con "{" y acaban en "}", por lo que la variable dejara de existir cuando se cierre el
corchete que este justo antes que ella en el codigo. Veamoslo con un ejempio:
{
int X = 12;
/* solo X disponible */
{
int q = 96;
/* X y q disponible */
}
/* solo X disponible */
/* q "fuera de ambito" */
}
Por otro lado si intentamos hacer lo siguiente:
{
int X = 12;
{
int X = 96; /* ilegal en Java, no en C++ */
}
}
El compilador se nos quejara diciendo que la variable x ya ha sido definida. En C++ esto si es
posible, pero los disenadores de Java decidieron no permitir este tipo de construcciones a
para lograr mas claridad en el codigo.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 24 de 148
3.7 ARRAYS
En Java los arrays son un objeto. Como tales se crean mediante el comando new (se vera su
uso en el tema 5). La sintaxis en la definicion de un array es la siguiente:
Tipo_datos[] nombre_array = new
Tipo_datos[tamano_array] ;
Tipo_datos es el tipo de los datos que se almacenaran en el array (int, char. String... o
cualquier objeto). Tamano_array es tamano que le queremos dar a este array. Veamos un
ejempio:
I int[] edades = new int[10];
En este ejempio hemos definido un array llamado edades, en el que podremos almacenar 10
datos tipo entero. El primer elemento de un array se situa en la posicion 0, exactamente igual
que en C. Si quisiesemos realizar un bucle que recorriese los elementos de este array
escribiriamos un codigo del tipo:
public class EjemploSb {
public static void main(String[] args) {
int[] edades = new int[10];
for(int i= 0; i< 10; i++){
edades[i] = i;
System. out . println("Elemento " + i + edades[i]);
}
int sum = 0;
for(int i= 0; i< 10; i++){
sum = sum + edades[i];
}
System. out . println("Suma " + sum);
}
}
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 25 de 148
3.8 TIPOS ENUMERADOS
Esta caracteristica del lenguaje solo esta disponible en Java 5 y superior. Si estas empleando
Java 1.4.x o inferior no podras emplearla. Cuando escribo este tutorial la version actual de
Java es la 6.
Los tipos de datos enumerados son un tipo de dato definido por el programador (no como
ocurre con los tipos de datos primitivos). En su definicion el programador debe indicar un
conjunto de valores finitos sobre los cuales las variables de tipo enumeracion deberan tomar
valores. La principal funcionalidad de los tipos de datos enumerados es incrementar la
legibilidad del programa. La mejor forma de comprender lo que son es viendolo; para definir
un tipo de dato enumerado se emplea la sintaxis:
I modificadores enum NombreTipoEnumerado{ VAL0R1,VAL0R2, . . }
Los posibles valores de "modificadores" seran vistos en el tema 5. El caso mas habitual es que
modificadores tome el valor "public". El nombre puede ser cualquier nombre valido dentro de
Java. Entre las Naves se ponen los posibles valores que podran tomar las variables de tipo
enumeracion, valores que habitualmente se escriben en letras mayusculas. Un ejempio de
enumeracion podria ser:
public enum Semana {LUNES, MARTES, MIERCOLES, JUEVES,
VIERNES, SABADO, DOMINGO}
Las definiciones de los tipos enumerados deben realizarse fuera del metodo main y, en
general, fuera de cualquier metodo; es decir, deben realizarse directamente dentro del cuerpo
de la clase. En el tema 5 se explicara detalladamente que es una clase y que es un metodo.
Para definir una variable de la anterior enumeracion se emplearia la siguiente sintaxis:
Semana variable;
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 26 de 148
y para darle un valor a las variables de tipo enumeracion estas deben asignarse a uno de los
valores creados en su definicion. El nombre del valor debe ir precedido del nombre de la
propia enumeracion:
I variable = Semana. DOMINGO;
Veamos un ejempio de programa que emplea enumeraciones:
public class EjemploSc {
//definimos un tipo enumerado
//los tipos enumerados deben definirse siempre fuera
//del main y, mas en general, fuera de cualquier metodo
public enum Semana {LUNES, MARTES, MIERCOLES, JUEVES,
VIERNES, SABADO, DOMINGO};
public static void main(String[] args) {
//definimos una variable que pertenece al tipo enumerado
Semana
//y le damos el valor que representa el dia martes
Semana hoy = Semana. MARTES;
//si el dia se cayese en el fin de semana no hay que trabajar
//obslrvese como gracias a la numeracion del programa es
facil del entender
if(hoy == Semana. DOMINGO || hoy == Semana. SABADO ) {
System. out . println("Hoy toca descansar");
} else{
System. out . println("Hoy toca trabajar");
}
}
3.9 JAVA NO ES PERFECTO
Ya hemos hecho hincapie en que Java esta disenado para facilitar la labor del programador,
disminuyendo los tiempos de aprendizaje y de programacion gracias a su sencillez y a su
capacidad de detectar errores; sin embargo, Java tambien tiene sus defectos: Java deja hacer
overflow sin dar error ni en tiempo de compilacion ni tan siquiera en tiempo de ejecucion.
Aqui teneis la prueba:
Java2, tutorial de javahispano (http://iavahispano.orq'). Paqina 27 de 148
public class ejemplo6 {
public static void main(String[] args) {
//0x significa que el numero esta en formato hexadecimal.
// 0x7 = 0111 en binario
// 0xf = 1111 en binario
//El numero representado abajo sera "0" + 31 "1" . El primer
//bit es el signo, al ser indica que es un numero
//positive. Es por lo tanto el numero entero (un int son 32
//bits) mas grande que podemos representar en Java
int gran = 0x7fffffff; // maximo valor int
prt("gran = " + gran);
//Forzamos un overflow:
int mas_grande = gran * 4;
//No se produce una excepcion y se ejecuta la siguiente linea
prt("mas_grande = " + mas_grande);
}
static void prt(String s) {
System. out . print In (s) ;
}
} ///:
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 28 de 148
4 CONTROL DE FLUJO EN JAVA
El mode de ejecucion de un programa en Java en ausencia de elementos de control de flujo
es secuencial, es decir una instruccion se ejecuta detras de otra y solo se ejecuta una vez. Esto
nos permite hace programas muy limitados; para evitarlo se introducen estructuras de control
de flujo.
Las estructuras de control de flujo de Java son la tipicas de cualquier lenguaje de
programacion, por lo que supondremos que todos estais familiarizados con ellas y se
explicaran con poco detenimiento.
4.1 SENTENCIAS CONDICIONALES
Ejecutan un codigo u otro en funcion de que se cumplan o no una determinada condicion.
Pasemos a ver sus principales tipos.
4.1.1 If then Else
Su modo mas simple de empleo es:
If (condicion) {
Grupo de sentencias}
Condicion es una valor tipo boolean. El grupo de sentencias se ejecuta solo si la condicion
toma un valor true. En caso contrario se sigue ejecutando ignorando el Grupo de sentencias.
If (condicion) {
Grupo de sentencias}
else{
Grupo2 de sentencias}
Java2, tutorial de javahispano (http://iavahispano.orq'). Paqina 29 de 148
Si condicion toma el valor true se ejecuta Grupo de sentencias, en caso contrario se ejecuta
Grupo2 de sentencias. En ambos casos se continua ejecutando el resto del codigo.
If (condicion) {
Grupo de sentencias}
else if (condicion2){
Grupo2 de sentencias}
else if (condicion3){
GrupoS de sentencias}
else{
Grupo_n de sentencias}
Si condicion toma el valor true se ejecuta Grupo de sentencias, si condicion2 toma el valor
true se ejecuta Grupo2 de sentencias... y asi sucesivamente hasta acabarse todas las
condiciones. Si no se cumple ninguna se ejecuta Grupo_n de sentencias. Este ultimo else es
opcional. En ambos casos se continua ejecutando el resto del codigo.
Ilustraremos esto con el siguiente ejempio:
public class Ejempio? {
// Metodo que podremos invovar como test(int a, int b) y que
// devolvera -1 si a < b, +1 si a > b y si a == b.
static int test(int val, int val2) {
int result = 0;
if(val > val2)
result = +1;
else if(val < val2)
result = -1;
else
result = 0;
return result;
}
public static void main(String[] args) {
//Imprimimos por consola el resultado de realizar unos
//cuantos test.
Java2, tutorial de javahispano ('http://iavahispano.orq'). Paqina 30 de 148
System. out . println(test(10, 5));
System. out . println(test(5, 10));
System. out . println(test(5, 5));
}
} ///:-
4.1.2 Switch
Los creadores de Java trataron de hacer de este lenguaje una version simplificada y mejorada
del lenguaje de C+ + . Su trabajo fue bastante bueno, pero no perfecto. Prueba de ello es esta
sentencia: esta tan poco flexible como en C+ + .
Expliquemos su sintaxis antes de dar los motivos de esta critica:
switch(selector) {
case valorl
case valor2
case valors
case valor4
case valors
// . . .
default: statement;
Grupo de sentenciasl; break;
Grupo de sentencias2; break;
Grupo de sentenciasS; break;
Grupo de sentencias4; break;
Grupo de sentenciasS; break;
Se compara el valor de selector con sentencias_n. Si el valor coincide se ejecuta su respectivo
grupo de secuencias. Si no se encuentra ninguna coincidencia se ejecutan las sentencias de
default. Si no se pusieran los break una vez que se encontrase un valor que coincida con el
selector se ejecutarian todos los grupos de sentencias, incluida la del default.
Ha llegado el momento de justificar la critica hecha a los creadores de Java. Este tipo de
estructura tiene sus posibilidades muy limitadas, ya que en las condiciones solo se admite la
igualdad, no ningun otro tipo de condicion (seria facil pensar ejemplos donde, por poner un
caso, se le sacaria partido a esta sentencia si acep
Lire la suite
- 916.79 KB
- 15
Vous recherchez le terme ""

