Вы находитесь на странице: 1из 61

Mdulo 2

Caractersticas del
Lenguaje Java

Programacin Orientada a Objetos


De las Heras, Sebastin
Java es una plataforma de desarrollo diseada por Sun Microsystems.
A la mayora de las plataformas de desarrollo se las pueden describir como
una combinacin de hardware y software mediante la cual se ejecuta un
sistema. La diferencia de la plataforma Java con la mayora de las
plataformas es que solamente se compone por software que corre sobre
otras plataformas.

La plataforma Java est constituida por los siguientes componentes:

Mquina Virtual Java (JVM).

Interfaz de Programacin de Aplicaciones Java (Java API).

Lenguaje de Programacin Java.

La Mquina Virtual Java es la base de la plataforma Java y en el


presente mdulo desarrollaremos una breve descripcin de la misma.

El Lenguaje de Programacin Java ser nuestro objeto de estudio en el


presente mdulo.

La Interfaz de Programacin de Aplicaciones Java es una amplia


coleccin de componentes que proveen a los programadores los medios
para desarrollar aplicaciones. Estos componentes estn agrupados en
grupos de libreras conocidas como paquetes. Cada uno de estos paquetes
contiene clases utilitarias que facilitan la tarea de los programadores a la
hora de desarrollar aplicaciones Java.

Lenguaje Java
Plataforma
Java API
Java
Plataforma:
Mquina Virtual Java
En Informtica, una
plataforma es un sistema
que sirve como base para Plataforma de Hardware
hacer funcionar
determinados mdulos de
hardware o de software
con los que es compatible.
Dicho sistema est
definido por un estndar
alrededor del cual se
determina una
arquitectura de hardware y
una plataforma de
software (incluyendo
entornos de aplicaciones).
Al definir plataformas se
establecen los tipos de
arquitectura, sistema
operativo, lenguaje de
programacin o interfaz de
usuario compatibles.
(Wikipedia, 2013)

Programacin Orientada a Objetos De las Heras, Sebastin | 2


2.1- Origen de Java y
caractersticas
principales
2.1.1- Origen de Java
El lenguaje de programacin Java es un lenguaje orientado a objetos
de propsitos generales diseado por Sun Microsystems lanzado en el
ao 1995. Su sintaxis es muy parecida a la de C y C++. Los desarrolladores
tomaron los conceptos orientados a objetos de C++, de los cuales
simplificaron algunos y eliminaron algunas otras caractersticas que
originaban dificultades para la programacin.

El lenguaje de programacin Java surgi a partir de la idea de desarrollar


una plataforma que pudiera funcionar en forma consistente en
ambientes heterogneos y dispersos en distintos puntos de una red.
Se deseaba tambin que esta plataforma permitiera la comunicacin
segura entre aplicaciones, con un consumo mnimo de recursos del
sistema y que las mismas puedan ejecutarse sobre cualquier plataforma
de hardware y software.

En un primer momento se comenz a trabajar con el lenguaje C++ como


herramienta de desarrollo para alcanzar los objetivos anteriormente
planteados, pero ms tarde las dificultades que se haban encontrado con
este lenguaje, llevaron a la determinacin de que para alcanzar los objetivos
anteriormente planteados era mejor el desarrollo de un nuevo
lenguaje de programacin.

El desarrollo de una plataforma independiente que pudiera ejecutar


aplicaciones en cualquier sistema operativo y bajo cualquier tipo de
hardware tuvo un mayor inters con el creciente avance de Internet. Con
Internet grandes contenidos de informacin podan ser accedidos y en sus
formas ms variadas por medio de formatos multimediales (audio y video).
La nueva plataforma a desarrollar deba tener en cuenta el gran movimiento
que Internet estaba causando y permitir a los usuarios acceder a la
informacin independientemente del hardware y software utilizado.

Programacin Orientada a Objetos De las Heras, Sebastin | 3


2.1.2- La Mquina Virtual Java
Junto al lenguaje de programacin, tambin se desarroll un procesador
del lenguaje encargado de interpretar instrucciones en un cdigo
binario especial de Java. Este procesador es la Mquina Virtual de Java
o JVM por sus siglas en ingls (Java Virtual Machine).

La JVM representa un concepto bastante importante en la ejecucin de


programas basados en la plataforma Java. Es el componente encargado de:

Proveer la independencia en cuanto al hardware y sistema


operativo sobre los cuales pueden correr las aplicaciones Java.

El pequeo tamao del cdigo compilado.

Proteger a los usuarios de posibles aplicaciones maliciosas.

La JVM es una mquina abstracta de computacin. Al igual que toda


mquina de computacin, la JVM posee un conjunto de instrucciones que
puede interpretar y manipula sectores de memoria en tiempo de ejecucin.

En el lenguaje de programacin Java, todas las instrucciones que hacen a la


constitucin de un programa son escritas en archivos de texto plano con
formato .java. Estos archivos contienen el cdigo fuente de un
programa. La JVM no conoce nada sobre el lenguaje Java, solamente
conoce cmo interpretar archivos en un formato binario en particular
(.class).

Para generar estos archivos binarios, los archivos fuentes son


compilados utilizando una aplicacin especfica para este fin
(compilador javac). Se deben compilar todos los archivos fuentes y por
cada uno de ellos tendremos el archivo binario correspondiente con
formato .class.

Los archivos binarios contienen instrucciones de la mquina virtual en


cdigo de bytes (bytecodes). Por razones de seguridad, la mquina
virtual java impone un formato estricto y estructurado sobre el contenido
de un archivo con formato .class.

La compilacin tiene los siguientes objetivos:


Revisar errores en la sintaxis del cdigo fuente.
Convertir el cdigo fuente en cdigo binario.

Cuando se ejecuta un programa, se ejecuta el comando java que se


encarga de instanciar a la Mquina Virtual Java para interpretar las
instrucciones de los archivos binarios y de esta forma ejecutar la
aplicacin programada.

Programacin Orientada a Objetos De las Heras, Sebastin | 4


Archivo fuente (.java)
MiAplicacion.java La codificacin de un programa se
compone de archivos fuentes con
formato (.java)

Se ejecuta el comando javac

Compilador El compilador se encarga de


generar los archivos binarios a partir
javac de los archivos fuentes

Archivo binario (.class)


Los archivos binarios contienen
MiAplicacion.class instrucciones de bajo nivel
(bytecode)

Se ejecuta el comando java

Mquina Virtual La JVM se encarga de


JVM interpretar las instrucciones de
Java los archivos binarios

El resultado del proceso es la


Mi Aplicacin ejecucin de la aplicacin
programada

Sun ha desarrollado distintas mquinas virtuales para distintas


arquitecturas, para que de esta forma, las instrucciones de un archivo
binario puedan ser interpretadas y ejecutas por la Mquina Virtual
independientemente de la plataforma sobre la que est corriendo. Es
decir, la posibilidad de contar con intrpretes java para cada plataforma
permite que el mismo archivo .class sea posible ejecutarlo sobre distintos
sistemas operativos (Microsoft Windows, Linux, Mac Os, Solaris OS, etc).

Programacin Orientada a Objetos De las Heras, Sebastin | 5


Archivo binario
(.class)

JVM JVM JVM


(Win32) (Unix) (Mac OS)

Win32 UNIX Mac OS

Este esquema permite que por medio de distintas Mquinas Virtuales Java,
una misma aplicacin sea posible de ejecutar sobre distintas plataformas.

Programacin Orientada a Objetos De las Heras, Sebastin | 6


La JVM es una de las piezas fundamentales de la plataforma Java.
Bsicamente se sita en un nivel superior al Hardware del sistema
sobre el que se pretende ejecutar la aplicacin, y este acta como un
puente que entiende tanto el bytecode, como el sistema sobre el que
se pretende ejecutar. As, cuando se escribe una aplicacin Java, se
hace pensando que ser ejecutada en una mquina virtual Java en
concreto, siendo sta la que en ltima instancia convierte de cdigo
bytecode a cdigo nativo del dispositivo final. La gran ventaja de la
mquina virtual java es aportar portabilidad al lenguaje, de manera
que desde Sun Microsystems se han creado diferentes mquinas
virtuales java para diferentes arquitecturas, y, as, un programa .class
escrito en Windows puede ser interpretado en un entorno Linux. Tan
solo es necesario disponer de dicha mquina virtual para dichos
entornos. De ah el famoso axioma que sigue a Java: "escrbelo una
vez, ejectalo en cualquier parte", o "Write once, run anywhere".
(Wikipedia, 2013)

Programacin Orientada a Objetos De las Heras, Sebastin | 7


2.1.3- Caractersticas de Java
James Gosling, quien es reconocido como el creador del lenguaje Java
realiz una descripcin de las caractersticas ms importantes de Java en
un paper titulado The Java Language Environment en el ao 1996. A
continuacin brindaremos una descripcin de las principales caractersticas
mencionadas por Gosling.

El lenguaje de programacin Java es un lenguaje de alto nivel con las


siguientes caractersticas:

Simplicidad: para comenzar a utilizar el lenguaje de programacin


no es necesario realizar estudios complejos y extensos del lenguaje.
Se puede comenzar a programar aplicaciones bsicas con slo
aprender los conceptos bsicos y fundamentales del lenguaje. Gran
parte de estos conceptos bsicos son aprendidos con facilidad por
parte de los programadores.

Orientado a Objetos: Java es un lenguaje de programacin


Orientado a Objetos. Todos los conceptos relacionados al Paradigma
Orientado a Objetos son tomados por el lenguaje Java y puestos en
prctica. En Java, encontramos aplicaciones prcticas para los
conceptos de objetos, clases, atributos, mtodos, abstraccin,
encapsulamiento, herencia, polimorfismo, etc.

Familiar: el lenguaje de programacin Java es muy parecido al de


C++. Java toma muchos conceptos de C++ y elimina algunos otros
que aportan mayor complejidad. Esta derivacin de C++ hacia Java,
convierte a este ltimo en un lenguaje que aporta algunos conceptos
ya conocidos por los programadores.

Robusto: el lenguaje Java est diseado para crear aplicaciones


robustas y confiables. Java provee un compilador que se encarga de
evaluar nuestro cdigo en bsqueda de errores o situaciones
anormales. El intrprete a su vez tiene el control absoluto de la
aplicacin evitando que la misma acceda a componentes de
hardware o realice accesos directos a la memoria.

Seguridad: la plataforma Java ha sido diseada para operar en


ambientes distribuidos. Esta condicin ha hecho que los
diseadores de la plataforma le den mucha importancia a la
seguridad de las aplicaciones. Una aplicacin Java no puede ser
accedida desde el exterior debido a que se restringe el acceso de
cdigo desautorizado que pueda manipular el sistema.

Portabilidad: la plataforma Java ha sido diseada para que pueda


soportar aplicaciones que puedan funcionar sobre sistemas con
distintas caractersticas a lo largo de una red. Considerando este
escenario, las aplicaciones deben ser capaces de funcionar sobre
sistemas con distintas arquitecturas de hardware y software. Para
lograr dicho objetivo, el compilador de Java genera archivos
compilados con contenido de cdigo de bits (bytecodes)
independientes de la plataforma sobre la que opera la aplicacin. La
Mquina Virtual Java especfica para una plataforma, toma el
cdigo de bits, lo interpreta y lo traduce en instrucciones vlidas en
la plataforma que opera la aplicacin. Esta estructura permite que

Programacin Orientada a Objetos De las Heras, Sebastin | 8


una aplicacin Java se pueda ejecutar sobre distintas plataformas y
en todas ellas se obtenga el mismo comportamiento.

Performance: Java adopta un esquema de trabajo en el cual el


intrprete Java puede funcionar a una alta velocidad. A su vez, el
Garbage Collector funciona por detrs de la aplicacin con baja
prioridad, lo que permite una mayor disponibilidad de memoria
para cuando la misma sea requerida por la aplicacin.

Interpretado: a diferencia de los lenguajes compilados, Java


dispone de un intrprete que se encarga de leer cada una de las
instrucciones de un programa (bytecode) para saber qu accin debe
ejecutar. En un lenguaje compilado, una vez escrito el programa
fuente, el mismo es traducido a instrucciones en lenguaje nativo de
la plataforma donde se ejecuta. La responsabilidad de un intrprete
para que se encargue de la lectura de las instrucciones permite
portabilidad y una mayor seguridad para el sistema donde se ejecuta
la aplicacin, ya que el intrprete puede filtrar operaciones
maliciosas para el sistema.

Multihilo: Java permite el desarrollo de aplicaciones que soportan


la ejecucin de mltiples hilos de trabajo en forma concurrente. Este
es un concepto muy importante para el desarrollo de aplicaciones en
ambientes distribuidos a lo largo de una red. Un programa puede
ejecutar ms de una tarea a la vez.

Dinmico: Java provee un mecanismo en el cual las clases son


cargadas en el sistema a medida que se las necesitan. Adems, en un
ambiente cliente-servidor, las aplicaciones del lado del servidor
pueden tener modificaciones sin que el cliente tenga que recompilar
su cdigo.

Programacin Orientada a Objetos De las Heras, Sebastin | 9


2.1.4- Configuracin del entorno de
desarrollo
A continuacin, vamos a crear un programa en Java que simplemente
muestre en pantalla una cadena de texto. Para lograr este objetivo
realizaremos las siguientes acciones:

1. Instalar el software de desarrollo de Java (JDK) que permite la


creacin y ejecucin de programas codificados en el lenguaje de
programacin Java.

2. Codificar el programa.

3. Compilar los archivos fuente.

4. Ejecutar el programa.

Instalacin de JDK (Java Development Kit)


JDK es el software bsico y necesario de Java que permite desarrollar
programas usando el lenguaje de programacin Java. Se denomina JDK
debido a sus siglas en ingls de Java Development Kit.

Las herramientas ms importantes que se incluyen en este software son:

- javac: compilador de Java.

- java: intrprete de Java.

- javadoc: generador de documentacin de las clases de un


programa.

- appletviewer: visualizador de applets (aplicacin que se ejecuta en


el contexto de otro programa).

- jar: generador y manipulador de archivos JAR.

Para instalar el software JDK en nuestras mquinas podemos acceder a la


siguiente URL y desde all descargar la ltima versin del software:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Una vez que hemos descargado el software, procedemos a instalarlo


siguiendo las instrucciones de instalacin.

Programacin Orientada a Objetos De las Heras, Sebastin | 10


Codificacin
Comenzaremos con la codificacin de un programa que muestre en pantalla
el siguiente mensaje:

Este es mi primer programa Java

Para ello abriremos un editor de texto plano (si utiliza Microsoft Windows
como sistema operativo puede utilizar el programa Notepad) y en un nuevo
archivo escribiremos el siguiente cdigo:
public class MiPrograma
{
public static void main(String[] args)
{
System.out.println("Este es mi primer programa Java");
}
}

Ms adelante explicaremos en detalle cada una de las instrucciones del


cdigo que hemos escrito, por ahora simplemente debemos saber que la
ejecucin de dicho cdigo muestra en pantalla el mensaje Este es mi
primer programa Java.

Una vez que hemos escrito el cdigo, debemos guardar el contenido en un


archivo con nombre MiPrograma.java. Debemos asegurarnos que la
extensin del archivo sea .java. Este archivo representa nuestro archivo
fuente del programa.

Compilacin
El paso siguiente que debemos realizar es compilar el archivo fuente.
Para ello abrimos la consola de smbolo del sistema (Inicio Ejecutar
cmd) y nos ubicamos en el directorio en donde hemos guardado el archivo
fuente MiPrograma.java. A modo de ejemplo, vamos a suponer que el
archivo MiPrograma.java se encuentra en el directorio C:\POO. Desde
dicha ubicacin ejecutaremos el compilador de java (javac.exe) y le
indicaremos el archivo fuente que debe compilar. El compilador javac.exe
se encuentra en el directorio bin de la JDK y este ltimo se encuentra en
el directorio de instalacin que hemos designado en el momento de instalar
la JDK.

El comando a ejecutar para realizar la compilacin del archivo fuente


MiPrograma.java es el siguiente:

"c:\Program Files\Java\jdk1.7.0_10\bin\javac.exe" MiPrograma.java

Programacin Orientada a Objetos De las Heras, Sebastin | 11


Como resultado de esta ejecucin, si refrescamos el directorio donde se
encuentra nuestro archivo fuente podremos ver que se ha generado un
nuevo archivo denominado MiPrograma.class. Este ltimo archivo es
nuestro archivo compilado o binario. Recordemos que estos archivos
tienen la extensin .class.

Ejecucin del programa


Para ejecutar nuestro programa, debemos ejecutar el comando java.exe
e indicar el nombre de la clase compilada que contiene el mtodo main,
en nuestro caso, la clase MiPrograma. La ubicacin del intrprete
java.exe se encuentra en el directorio bin de nuestra JDK. El comando
para la ejecucin del programa es el siguiente:

"C:\Program Files\Java\jdk1.7.0_10\bin\java.exe" MiPrograma

Luego de ejecutar dicho comando, podremos ver que en la consola del


sistema figura el mensaje Este es mi primer programa Java.

Programacin Orientada a Objetos De las Heras, Sebastin | 12


Vamos a explicar brevemente el contenido del cdigo que hemos escrito
para entender mejor el programa que hemos desarrollado. En los captulos
siguientes vamos a comprender con un mejor nivel de detalle las
instrucciones que acabamos de codificar.
public class MiPrograma
{
public static void main(String[] args)
{
System.out.println("Este es mi primer programa Java");
}
}

La primera lnea de nuestro cdigo (public class MiPrograma) define


una clase que tiene por nombre MiPrograma. La forma de declarar clases
en Java es utilizando la palabra class y a continuacin el nombre de la
clase. La palabra public define el tipo de acceso a la clase y lo
explicaremos con mayor detalle en el mdulo 3.

Las llaves { } en Java se utilizan para encerrar bloques de cdigo. El primer


bloque de cdigo encierra el conjunto de sentencias referentes a la clase
MiPrograma.

Dentro del bloque de cdigo de la clase MiPrograma, se define el mtodo


main:
public static void main(String[] args)
{
System.out.println("Este es mi primer programa Java");
}

El mtodo main es el punto de ejecucin de una aplicacin Java. La


cabecera del mtodo main debe tener la siguiente estructura:
public static void main(String[] args)

Ms adelante explicaremos cada una de las palabras que componen la


estructura de este mtodo. Por ahora simplemente debemos tener en cuenta
que este mtodo representa el punto de ejecucin de una aplicacin Java.
En nuestro ejemplo, el mtodo main contiene una nica sentencia en su
bloque de cdigo. La sentencia System.out.println tiene como propsito
la impresin en pantalla de una cadena de texto. Para ello, es necesario
pasarle un parmetro a esta sentencia que se corresponde con el texto que
deseamos visualizar en pantalla:
System.out.println("Este es mi primer programa Java");

La aplicacin java.exe ejecuta una aplicacin Java. Cuando se ejecuta el


comando java.exe, es necesario enviarle como parmetro la clase que
contiene al mtodo main, ya que este mtodo indica el punto de inicio de
la aplicacin. De all la razn por la cual para ejecutar nuestro ejemplo
escribimos la clase MiPrograma a continuacin del comando java.exe,
ya que esta clase es la que contiene el mtodo main. Una vez que el
comando es ejecutado, la Mquina Virtual Java carga la clase
MiPrograma e invoca al mtodo main. La aplicacin finaliza cuando la
ejecucin del mtodo main termina.

Programacin Orientada a Objetos De las Heras, Sebastin | 13


2.1.5- Utilizacin de una IDE
Hemos visto los pasos necesarios para codificar, compilar y ejecutar una
aplicacin Java. Normalmente, en lugar de realizar estos pasos por lneas de
comandos, se utilizan aplicaciones que permiten codificar, compilar y
ejecutar aplicaciones Java con una interfaz ms amigable. Cada una de
estas aplicaciones se denomina IDE (Integrated Development
Environment Entorno de Desarrollo Integrado). Algunas de las
IDEs ms populares son:

Eclipse

NetBeans

JDeveloper

MyEclipse

JBuilder

JCreator

BlueJ

A continuacin, vamos a codificar el mismo programa que hemos realizado


con anterioridad pero utilizando NetBeans como IDE.

El primer paso que debemos realizar es descargar la IDE. Si accedemos a la


siguiente URL podremos descargar la ltima versin de NetBeans:

http://netbeans.org/downloads/index.html

Una vez que hemos descargado el software, procedemos a instalarlo


siguiendo las instrucciones. Al momento de redactar esta lectura, se utiliz
la versin 7.0 en espaol de NetBeans.

Si abrimos la IDE nos encontraremos con un panel principal. Para crear un


nuevo proyecto seleccionamos en la barra de men Archivo, Proyecto
Nuevo.

Se nos abrir una nueva ventana para configurar opciones del nuevo
proyecto que deseamos crear. All seleccionamos como categora de
proyecto la opcin Java y en la seccin de Proyectos seleccionamos
Aplicacin Java.

Programacin Orientada a Objetos De las Heras, Sebastin | 14


Apretamos el botn Siguiente >.

En esta nueva pantalla debemos definir un nombre para nuestro proyecto.


En este caso podemos definir como nombre de proyecto
MiPrimerPrograma.

En esta pantalla se puede tambin seleccionar la ubicacin fsica en disco


donde se crear nuestro proyecto.

La ventana de configuracin tambin nos ofrece la opcin de Crear clase


principal, pero desmarcamos dicha opcin y apretamos el botn
Terminar.

Programacin Orientada a Objetos De las Heras, Sebastin | 15


Si visualizamos el panel de proyectos (arriba a la izquierda) podremos ver
que nuestro proyecto ha sido creado.

Una vez que tenemos el proyecto creado, el siguiente paso es crear una clase
que contendr el mtodo main. Recordemos que este mtodo es el punto
de ejecucin de una aplicacin Java.

Para crear una nueva clase, apretamos botn derecho en el contenedor


Paquetes de fuentes, seleccionamos Nuevo, Clase Java y en la nueva
ventana debemos colocar un nombre para nuestra nueva clase. El nombre
que definiremos ser MiPrograma. Una vez definida el nombre de la
clase, apretamos el botn Terminar.

Programacin Orientada a Objetos De las Heras, Sebastin | 16


Una vez creada la clase, podremos editar la misma mediante un editor de
texto plano que nos ofrece la IDE. Tambin podemos notar en el panel de
proyectos que la clase ya forma parte de nuestro proyecto y se encuentra en
el contenedor Paquetes de fuentes. Todos los archivos fuentes que
creamos se ubican en este contenedor.

A medida que editamos el archivo fuente MiPrograma.java en el editor,


automticamente la IDE nos informar si estamos cometiendo algn error
de compilacin.

A continuacin, crearemos el mtodo main en la clase MiPrograma.


Para ello escribiremos el siguiente bloque de cdigo dentro de la clase
MiPrograma:
public static void main(String[] args)
{

Ya hemos definido el mtodo main. Ahora escribiremos una sentencia


dentro de este mtodo que permita la impresin en pantalla de la cadena de
texto Este es mi primer programa Java. Escribiremos la siguiente
sentencia:
System.out.println("Este es mi primer programa Java");

Programacin Orientada a Objetos De las Heras, Sebastin | 17


La clase MiPrograma queda codificada de la siguiente manera:

Lo que estamos haciendo en realidad es editar un archivo de texto, y a


medida que vamos modificando este archivo es conveniente guardar los
cambios. Podemos guardar los cambios del archivo si nos dirigimos a
Archivo, Guardar.

Para ejecutar la aplicacin, lo que debemos realizar es apretar el botn


derecho sobre el archivo MiPrograma.java y seleccionamos la opcin
Ejecutar archivo.

Programacin Orientada a Objetos De las Heras, Sebastin | 18


Luego de seleccionar la opcin Ejecutar archivo, una ventana de Salida
tomar el foco de nuestra ejecucin y nos mostrar el mensaje Este es mi
primer programa Java. Esta ventana representa la consola de nuestro
sistema.

Como podemos ver, el uso de la IDE nos facilita la tarea de codificar,


compilar y ejecutar un proyecto.

Para la codificacin del programa, la IDE nos ofrece un editor de texto que
nos informa sobre los errores de compilacin que estamos cometiendo a
medida que escribimos el cdigo.

Para la compilacin y ejecucin del programa no hace falta recordar la ruta


donde se encuentran el compilador javac.exe y el intrprete java.exe. La
IDE se encarga de ejecutar estos programas para la compilacin y ejecucin
del proyecto.

Programacin Orientada a Objetos De las Heras, Sebastin | 19


2.2- Sintaxis
2.2.1- Identificadores
En el lenguaje de programacin Java, todos los componentes como clases,
variables y mtodos necesitan de un nombre que los identifiquen. En
Java, estos nombres se denominan identificadores. Un identificador est
constituido por una secuencia de caracteres que deben obedecer ciertas
reglas.

A continuacin vamos a describir las reglas en las que el compilador se basa


para determinar si el nombre con el que hemos constituido a un
identificador es legal. Por legal entendemos todo aquello que est permitido
por el compilador, pero no siempre todo lo que est permitido es
aconsejable. Por ello, tambin indicaremos algunos consejos en el momento
de usar identificadores.

Tcnicamente, un identificador debe obedecer las siguientes reglas:

- Los identificadores deben comenzar con una letra, el smbolo de


moneda ($), o un carcter de subrayado _.

- Los identificadores no pueden comenzar con un nmero.

- Despus del primer carcter, los identificadores pueden contener


cualquier combinacin de letras, smbolos de moneda ($), caracteres
de subrayado o nmeros.

- Los identificadores no pueden contener espacios en blanco.

- Los identificadores pueden tener cualquier longitud.

La siguiente es una lista vlida de identificadores en Java:


nombre
edad_persona
Edad_persona
_identificador
$monto
_este_es_un_identificador_valido
___2_x
_$

La siguiente es una lista invlida de identificadores en Java:


:nombre
-peso
variable#
.punto
123Z
direccin@servidor

Programacin Orientada a Objetos De las Heras, Sebastin | 20


Es importante tener en cuenta que los identificadores en Java distinguen
maysculas y minsculas, por lo tanto los siguientes identificadores son
totalmente distintos entre s:
nombre
Nombre
NOMBRE
nOmBRe

Algunas recomendaciones en el momento de definir un identificador


pueden ser las siguientes:

- Utilizar palabras completas y no abreviaturas pequeas difciles de


entender. Esto permite un mejor entendimiento del cdigo.

- Comenzar el nombre de un identificador con una letra.

- Si el identificador est compuesto por una sola palabra, es


recomendable que todas las letras sean minsculas.

- Si el identificador est compuesto por ms de una palabra, es


recomendable que la primera letra de la primera palabra est en
minscula y las primeras letras del resto de las palabras siguientes
estn en maysculas.

Ejemplo:
nombreUsuario
numeroDeVuelo
ejemploDeSintaxisDeUnIdentificador

Programacin Orientada a Objetos De las Heras, Sebastin | 21


2.2.2- Palabras claves
Java cuenta con un conjunto de palabras claves (keywords) que tienen un
significado especial para el lenguaje y no pueden ser utilizadas como
identificadores. A continuacin se listan estas palabras claves:

abstract boolean break byte case

catch char class const continue

default do double else extends

final finally float for goto

if implements import instanceof int

interface long native new package

private protected public return short

static strictfp super switch synchronized

this throw throws transient try

void volatile while assert enum

Cualquier intento de utilizacin de estas palabras como identificadores


producir un error de compilacin.

Programacin Orientada a Objetos De las Heras, Sebastin | 22


2.2.3- Comentarios
Una aplicacin Java puede ser documentada mediante la insercin de
comentarios en algunos sectores relevantes del cdigo fuente. El
propsito de estos comentarios es el de mantener documentada la
aplicacin para facilitar el entendimiento de la misma. Estos comentarios
son ignorados por el compilador.

Los tipos de comentarios que existen son los siguientes:

1) Comentario de nica lnea: se indica mediante los caracteres //

Ejemplo:
public class MiPrograma
{
// Este es un comentario de una nica lnea
public static void main(String[] args)
{
System.out.println("Este es mi primer
programa Java");
}
}

Todo lo que est escrito a la derecha de los caracteres // es ignorado


por el compilador.

2) Comentario de lneas mltiples: se indican utilizando los


caracteres /* y */ en dicho orden. /* Son los caracteres de inicio de
comentario y */ son los caracteres de fin de comentario.

Ejemplo:
public class MiPrograma
{
/* Este es un comentario
de lneas multiples. */
public static void main(String[] args) {
System.out.println("Este es mi primer
programa Java");
}
}

Todo lo que se encuentre entre los caracteres /* y */ es ignorado por


el compilador.

3) Comentario Javadoc: este tipo de comentario se indica utilizando


los caracteres /** y */ en dicho orden. Los comentarios Javadoc son
utilizados para generar documentacin HTML del programa en
forma automatizada. Este tipo de comentario suele colocarse

Programacin Orientada a Objetos De las Heras, Sebastin | 23


inmediatamente antes de la declaracin de una clase, interfaz o
mtodo.

Ejemplo:
/**
* Ejemplo de comentario Javadoc.
* Este tipo de comentario es utilizado para
* generar documentacin en formato HTML sobre la
* aplicacin.
* Objetivo de la aplicacin:
* Mostrar en pantalla el mensaje "Este es mi
primer programa Java"
*/
public class MiPrograma
{
public static void main(String[] args) {
System.out.println("Este es mi primer
programa Java");
}
}

Programacin Orientada a Objetos De las Heras, Sebastin | 24


2.2.4- Declaracin de variables

Una variable almacena un valor de un tipo de dato en particular. Una


variable debe tener:
Identificador.
Tipo de dato.
Valor.

Durante la declaracin de una variable se debe especificar el tipo de


dato de la variable y el identificador de la misma:
tipo_de_dato identificador;

Ejemplo:
int edad;

El ejemplo se corresponde con la declaracin de una variable cuyo tipo de


dato es un numrico entero y tiene por nombre edad.

Si tenemos varias variables del mismo tipo, es posible declararlas a todas


ellas en una misma lnea:
int edad, peso, numero;

En este caso se declaran tres variables numricas enteras. Esta lnea es


equivalente a declarar las tres variables en lneas separadas:
int edad;
int peso;
int numero;

Tambin se puede asignar un valor a la variable en la misma lnea de la


declaracin:
int edad = 25;
int a, b, c = 10;
int d=128, e,f=15;

La variable edad tiene como valor asignado al nmero 25.

Las variables a, b y c tienen como valor asignado al nmero 10.

La variable d tiene como valor asignado al nmero 128.

La variable e y f tienen como valor asignado al nmero 15.

Programacin Orientada a Objetos De las Heras, Sebastin | 25


2.2.5- Separadores
El uso de separadores en Java ayuda a definir y organizar la
estructura del cdigo del programa. A continuacin se listan los
separadores de cdigo usados en Java y el propsito de cada uno de ellos:

Separador Propsito

Encierra argumentos en la definicin de mtodos y tambin


en las llamadas de los mismos.

Delimita expresiones lgicas.


( )
Determina la precedencia en expresiones lgicas.

Es utilizado para indicar casteos hacia un tipo especfico.

Delimita bloques de cdigo.


{ }
Puede ser usado para la inicializacin de matrices.

Encierra el tipo de dato que contendr una matriz.

[ ] Encierra el tamao de una matriz.

Encierra la referencia a un elemento de una matriz.

; Finaliza una sentencia.

Separa la declaracin de varios identificadores del mismo


tipo.
,
Separa los argumentos que se envan a un mtodo.

Selecciona un mtodo o atributo de un objeto.


.
Separa paquetes, subpaquetes y clases.

Es usado en la declaracin de marcadores.


:
Es usado en declaraciones abreviadas de if y for.

Programacin Orientada a Objetos De las Heras, Sebastin | 26


2.3- Tipos de datos
En todo lenguaje de programacin, uno de los primeros conceptos que todo
programador debe entender es el conjunto de tipos de datos que se
pueden manipular.

Por tipo de dato vamos a entender al conjunto de valores


que una variable puede tener. Adems de definir el tipo de valor
de una variable, el tipo de dato tambin define las
operaciones que se pueden realizar con dicha variable.

El tipo de dato de una variable se establece en la declaracin de la


variable.

En java existen dos conjuntos de tipos de datos:

Tipos primitivos: se utilizan para declarar variables que se


almacenen en forma directa en memoria. No son objetos.

Tipos referencia: se utilizan para manipular objetos. Su concepto


es similar a lo que en otros lenguajes se denominan punteros.

En esta seccin nos ocuparemos de los tipos de datos primitivos. Estos tipos
de datos manejan los tipos de informacin ms habituales.

En Java, los tipos primitivos se pueden dividir en cuatro categoras:

- Numricos integrales: byte, short, int, long.

- Numricos de punto flotante: float, double.

- Valores lgicos: boolean.

- Caracteres simples: char.

Programacin Orientada a Objetos De las Heras, Sebastin | 27


Cada tipo primitivo define un rango de valores que una variable puede
tener. Este rango de valores est definido por la cantidad de bits que ocupa
su almacenamiento en memoria:

Tipo Bits Contenido

Representa 1 bit de informacin aunque


boolean su tamao no est definido en forma false, true
precisa.

char 16 Caracteres Unicode

byte 8 -128 a 127

short 16 -32768 a 32767

int 32 -231 a 231 -1

long 64 -9 * 1018 a 9 * 1018 -1

float 32 Hasta 6 7 decimales

double 64 Hasta 14 15 decimales

Cuando se define una variable de tipo primitiva, la misma es almacenada en


un sector de la memoria denominado Stack. Este sector de la memoria es
manejado directamente por el procesador y tiene la ventaja de tener un
acceso rpido a los datos. Por otro lado, el uso de datos primitivos en el
Stack tiene la desventaja de que el compilador debe conocer de antemano el
tamao y tiempo de vida de los datos que van a ser almacenados.

Los tipos de datos por referencia (objetos) son almacenados en otro sector
de la memoria denominado Heap, y para hacer uso del mismo no es
necesario que el compilador conozca de antemano el tamao ni el tiempo de
vida de los datos que van a ser almacenados, pero el tiempo de acceso a
este sector es ms lento.

Programacin Orientada a Objetos De las Heras, Sebastin | 28


2.3.1- Numricos integrales
A continuacin, escribiremos un programa en el que se declaran una serie
de variables primitivas de tipo numricas integrales y se imprimen sus
valores en pantalla:

Ejemplo:
package principal;

public class NumericosEnteros


{
public static void main(String[] args)
{
System.out.println("Variables enteras");

byte variable_byte = 2;
System.out.println("byte: " + variable_byte);

short variable_short = 127;


System.out.println("short: " + variable_short);

int variable_int = 123456789;


System.out.println("int: " + variable_int);

long variable_long = 112233445566778899l;


System.out.println("long: " + variable_long);
}
}

Y el resultado de su ejecucin es el siguiente:


Variables enteras
byte: 2
short: 127
int: 123456789
long: 112233445566778899

Si analizamos el cdigo de ejemplo, podemos observar que para asignar el


valor 112233445566778899 a variable_long es necesario agregar al final
del valor la letra l o L. Cuando escribimos una cadena de nmeros en Java,
el compilador entiende que dicho valor es un int. Para indicar que el valor
que estamos asignando no es int, sino que se trata de un dato long es
necesario agregar al final de la cadena la letra l o L. De esta forma, el
compilador entiende que estamos asignando un valor de tipo long. Esta
consideracin no es necesario hacerla para los tipos de datos inferiores a int
(short, byte, char).

Programacin Orientada a Objetos De las Heras, Sebastin | 29


2.3.2- Numricos de punto flotante
Los nmeros en punto flotante pueden ser float o double. Estos nmeros
representan valores decimales con partes fraccionarias.

package principal;

public class PuntoFlotante


{
public static void main(String[] args)
{
System.out.println("Variables de punto flotante");

float variable_float = 1.5f;


System.out.println("float: " + variable_float);

double variable_double = 123.456789;


System.out.println("double: " + variable_double);
}
}

Si ejecutamos el programa, la salida ser la siguiente:


Variables de punto flotante
float: 1.5
double: 123.456789

El tipo de dato por defecto de una cadena de nmeros en punto flotante es


double. Si deseramos escribir un valor float, entonces es necesario
agregar la letra f o F al final de la cadena de nmeros para indicarle al
compilador que el valor se trata de un float.

Programacin Orientada a Objetos De las Heras, Sebastin | 30


2.3.3- Lgicos (boolean)
Los tipos de datos booleanos representan los valores lgicos verdadero
(true) o falso (false) y uno de los usos ms comunes de este tipo de dato
es para dirigir las secuencias de cdigo a ejecutar en un programa. Para
representar estos valores se utilizan las palabras claves true y false.

Mediante el uso de las mismas se pueden evaluar condiciones que


permiten tomar una decisin.

Ejemplo:

package principal;

public class Logicos


{
public static void main(String args[])
{
System.out.println("Variables booleanas");

boolean variable_boolean_false = false;


System.out.println("boolean false: " +
variable_boolean_false);

boolean variable_boolean_true = true;


System.out.println("boolean true: " +
variable_boolean_true);
}
}

Y el resultado de la ejecucin es:


Variables booleanas
boolean false: false
boolean true: true

Programacin Orientada a Objetos De las Heras, Sebastin | 31


2.3.4- Caracteres simples
Un carcter literal se representa entre comillas simples y la palabra clave
que lo representa es char. Este tipo de dato contiene un carcter Unicode
de 16 bits. Los caracteres Unicode son representados por nmeros
Unicode: enteros de 16 bits sin signo lo que da un rango de valores de 0 a 65535.
Esto permite asignar un dgito numrico a una variable de tipo char
El Estndar Unicode es un asumiendo que dicho dgito est en el rango entre 0 y 65535.
estndar de codificacin de
caracteres diseado para Ejemplo:
facilitar el tratamiento package principal;
informtico, transmisin y
visualizacin de textos de public class CaracteresSimples
mltiples lenguajes y {
disciplinas tcnicas public static void main(String args[])
adems de textos clsicos {
de lenguas muertas. El System.out.println("Variables char");
trmino Unicode proviene
char variable_char1 = 'a';
de los tres objetivos System.out.println("char: " + variable_char1);
perseguidos:
universalidad, char variable_char2 = 64;
uniformidad y unicidad. System.out.println("char: " + variable_char2);
(Wikipedia, 2013) }
}

Y el resultado es:
Variables char
char: a
char: @

Programacin Orientada a Objetos De las Heras, Sebastin | 32


2.3.5- Cadena de caracteres
Un caso especial de tipo de datos es el de las cadenas de caracteres. Una
cadena de caracteres no representa un tipo de dato primitivo, son objetos
de la clase String. Sin embargo, para facilitar el uso de este tipo de dato
ya que es de uso muy comn en la programacin, Java permite hacer uso de
las cadenas de caracteres como si se tratara de un tipo de dato primitivo.

Ejemplo:
package principal;

public class TipoString


{
public static void main(String args[])
{
System.out.println("Variables String");

String variable_String1 = "Programacin Orientada a


Objetos";
System.out.println("variable_String1: " +
variable_String1);

String variable_String2 = "Tipos de datos";


System.out.println("variable_String2: " +
variable_String2);
}
}

Y el resultado de la ejecucin es:

Variables String
variable_String1: Programacin Orientada a Objetos
variable_String2: Tipos de datos

Cuando asignamos una cadena de caracteres en una variable, en realidad


Java est creando un objeto de la clase String. En el mdulo 3 veremos que
para declarar e inicializar un objeto es necesario usar el operador new. Java
aplica una excepcin para los objetos de la clase String y permite hacer una
asignacin directa de una cadena de caracteres a una variable como si se
tratara de un tipo primitivo, pero en realidad est creando un objeto de tipo
String.

En los ejemplos anteriores hemos asignado cadenas de caracteres sin


interrupciones. Muchas veces es deseable mostrar en pantalla cadenas de
caracteres con saltos de lneas o tabulaciones. En ese caso podemos usar los
caracteres especiales \n para aplicar saltos de lnea y los caracteres \t
para aplicar tabulaciones.

Programacin Orientada a Objetos De las Heras, Sebastin | 33


Ejemplo:
package principal;

public class TipoString


{
public static void main(String args[])
{
String variable_String1 = "En este ejemplo se
muestra\nuna cadena de caracteres con un salto de
lnea";
System.out.println(variable_String1);

String saltoDeLinea = "\n";


System.out.println(saltoDeLinea);

String variable_String2 = "Materia:\tProgramacin


Orientada a Objetos";
System.out.println(variable_String2);

String variable_String3 = "Ejemplo:\tCadena de


caracteres con tabulacin";
System.out.println(variable_String3);
}
}

El resultado es el siguiente:
En este ejemplo se muestra
una cadena de caracteres con un salto de lnea

Materia: Programacin Orientada a Objetos


Ejemplo: Cadena de caracteres con tabulacin

Programacin Orientada a Objetos De las Heras, Sebastin | 34


2.4- Operadores, control de
flujo, precedencia
2.4.1- Operadores
Java dispone de un amplio conjunto de operadores y a continuacin vamos
a explicar los ms importantes.

Operadores aritmticos
Los siguientes operadores son considerados aritmticos:

Suma (+)

Resta (-)

Multiplicacin (*)

Divisin (/)

Resto de la divisin (%)

Ejemplo:

package principal;

public class Aritmeticos {

public static void main(String[] args) {


int a = 10;
int b = 2;

int suma = a + b;
System.out.println("Suma: a + b = " + suma);

int resta = a - b;
System.out.println("Resta: a - b = " + resta);

int multiplicacion = a * b;
System.out.println("Multiplicacin: a * b = " +
multiplicacion);

int division = a / b;
System.out.println("Divisin: a / b = " +
division);

Programacin Orientada a Objetos De las Heras, Sebastin | 35


int resto = a % b;
System.out.println("Resto: a % b = " + resto);
}

El resultado es:
Suma: a + b = 12
Resta: a - b = 8
Multiplicacin: a * b = 20
Divisin: a / b = 5
Resto: a % b = 0

Operadores de asignacin
Asignan un valor a una variable. El operador por excelencia de
asignacin es el operador igual (=).

Existen otros operadores de asignacin que tienen por objetivo abreviar la


combinacin de operaciones y la asignacin del resultado en una variable.

Cualquier expresin de la forma

variable = variable operador expresin

es equivalente a

variable operador = expresin

Veamos algunos ejemplos:

package principal;

public class Asignacion {

public static void main(String[] args) {

int a = 10; // Asignacin


int b = 2; // Asignacin
System.out.println("El valor de a es: " + a);
System.out.println("El valor de b es: " + b);

a += b; // Operacin equivalente: a = a + b;
System.out.println("a += b. El valor de a es " + a);

a -= b; // Operacin equivalente: a = a - b;
System.out.println("a -= b. El valor de a es " + a);

a *= b; // Operacin equivalente: a = a * b;
System.out.println("a *= b. El valor de a es " + a);

Programacin Orientada a Objetos De las Heras, Sebastin | 36


a /= b; // Operacin equivalente: a = a / b;
System.out.println("a /= b. El valor de a es " + a);

a %= b; // Operacin equivalente: a = a % b;
System.out.println("a %= b. El valor de a es " + a);
}

El resultado es:
El valor de a es: 10
El valor de b es: 2
a += b. El valor de a es 12
a -= b. El valor de a es 10
a *= b. El valor de a es 20
a /= b. El valor de a es 10
a %= b. El valor de a es 0

Los operadores + y tambin definen las siguientes operaciones


unarias:
package principal;

public class Unarios {

public static void main(String[] args) {


byte a = 14;
int b = 2;

System.out.println(+a);
System.out.println(-b);
}

+a: En este caso el operador + produce como resultado una variable de


tipo int. Si la variable afectada por este operador es de tipo byte, short o
char, este operador devuelve como resultado un valor int. Si la variable a
fuera de otro tipo numrico, el valor a devolver por el operador + sera del
mismo tipo que su operando.

-b: En este caso el operador simplemente devuelve la negacin del


nmero.

Programacin Orientada a Objetos De las Heras, Sebastin | 37


Operadores incrementales
Incremento (++): incrementa en una unidad el valor de una
variable.

Decremento (--): decrementa en una unidad el valor de una


variable.

Estos operadores se pueden usar de dos formas:

Precediendo a la variable: primero se incrementa o decrementa


en una unidad la variable, y el resultado es utilizado en la expresin.

Ejemplo:
package principal;

public class PreIncrementales {

public static void main(String[] args) {


int a = 5;

int b = ++a; // Operacin equivalente: b = a + 1


System.out.println("b = ++a. El valor de b es "
+ b);

int c = --a; // Operacin equivalente: b = a - 1


System.out.println("c = --a. El valor de c es "
+ c);
}

El resultado de la ejecucin es:


b = ++a. El valor de b es 6
c = --a. El valor de c es 5

Seguido a la variable: primero se utiliza el valor original de la


variable en la expresin y luego se realiza el incremento de la
variable.

Ejemplo:
package principal;

public class PostIncrementales {

public static void main(String[] args) {


int a = 5;

int b = a++; // Operacin equivalente: b = a;


a++;
System.out.println("b = a++. El valor de b es
" + b);

Programacin Orientada a Objetos De las Heras, Sebastin | 38


// En este momento "a" vale 6
int c = a--; // Operacin equivalente: b = a;
b--;
System.out.println("c = a--. El valor de c es
" + c);
}

El resultado es:
b = a++. El valor de b es 5
c = a--. El valor de c es 6

Operadores relacionales
Este tipo de operadores son utilizados para realizar comparaciones
entre expresiones. La aplicacin de estos operadores produce como
resultado un valor booleano que indica el cumplimiento o no de la
comparacin.

Ejemplo:
package principal;

public class Relacionales {

public static void main(String[] args) {


int a = 10;
int b = 5;

System.out.println("El valor de a es " + a);


System.out.println("El valor de b es " + b);

System.out.println("Operador > Es a mayor que b?:


" + (a > b));
System.out.println("Operador >= Es a mayor o igual
que b?: " + (a >= b));
System.out.println("Operador < Es a menor que b?:
" + (a < b));
System.out.println("Operador <= Es a menor o igual
que b?: " + (a < b));
System.out.println("Operador == Es a igual a b?: "
+ (a == b));
System.out.println("Operador != Es a distinto a
b?: " + (a != b));
}

Programacin Orientada a Objetos De las Heras, Sebastin | 39


El resultado es:
El valor de a es 10
El valor de b es 5
Operador > Es a mayor que b?: true
Operador >= Es a mayor o igual que b?: true
Operador < Es a menor que b?: false
Operador <= Es a menor o igual que b?: false
Operador == Es a igual a b?: false
Operador != Es a distinto a b?: true

Operadores lgicos
Estos operadores son utilizados para evaluar el valor lgico de una
expresin. Generalmente, estos tipos de operadores son utilizados cuando
es necesario evaluar una expresin para tomar una decisin.

Operador Nombre Utilizacin Resultado


Devuelve true si a y b
valen true.
& AND a&b Si a b valen false,
entonces el operador devuelve
false.
Devuelve true si a b
valen true.
| OR a|b Si a y b valen false,
entonces el operador devuelve
false.
Devuelve true si a y b
valen true.
Si a b valen false,
entonces el operador devuelve
false.
&& Short AND a && b
Si a vale false, entonces b
no es evaluado ya que
cualquiera sea el valor de b,
el resultado del operador es
false.
Devuelve true si a b
valen true.
Si a y b valen false,
entonces el operador devuelve
false.
|| Short OR a|b
Si a vale true, entonces b
no es evaluado ya que
cualquiera sea el valor de b,
el resultado del operador es
true.
Devuelve true si b es
false.
! Negacin !b
Devuelve false si b es
true.

Programacin Orientada a Objetos De las Heras, Sebastin | 40


package principal;

public class Logicos {

public static void main(String[] args) {


int a = 10;
int b = 5;
boolean c = true;
boolean d = false;

System.out.println("El valor de a es: " + a);


System.out.println("El valor de b es: " + b);
System.out.println("El valor de c es: " + c);
System.out.println("El valor de d es: " + d);

System.out.println("c & d = " + (c & d));


System.out.println("c | d = " + (c | d));

System.out.println("(a < 8) && (b < a) = " + ((a <


8) && (b < a)));
System.out.println("(a != b) || (b == 10) = " + ((a
!= b) || (b == 10)));

System.out.println("!c = " + !c);


System.out.println("!d = " + !d);
}

El resultado es:
El valor de a es: 10
El valor de b es: 5
El valor de c es: true
El valor de d es: false
c & d = false
c | d = true
(a < 8) && (b < a) = true
(a != b) || (b == 10) = true
!c = false
!d = true

En la comparacin (a < 8) && (b < a), la segunda expresin no es


evaluada ya que la primera expresin tiene como resultado un valor false.
No es necesario evaluar la segunda expresin ya que cualquiera sea su
resultado, el resultado conjunto final seguir siendo false. Si se desea
evaluar la segunda expresin de todas formas, entonces se debe utilizar el
operador &.

En la comparacin (a != b) || (b == 10), la segunda expresin no es


evaluada ya que la primera expresin tiene como resultado un valor true.
No es necesario evaluar la segunda expresin ya que cualquiera sea su
resultado, el resultado conjunto final seguir siendo true. Si se desea
evaluar la segunda expresin de todas formas, entonces se debe utilizar el
operador |.

Programacin Orientada a Objetos De las Heras, Sebastin | 41


Operador instanceof
Este operador es utilizado para saber si un objeto es una instancia o no
de una determinada clase. En caso de que el objeto pertenezca a la
clase, el operador devuelve true. En caso contrario devuelve false.

Ejemplo:
package principal;

public class OperadorInstanceof {

public static void main(String[] args) {


String a = "Operador instanceof";
System.out.println("a instanceof String = " +
(a instanceof String));
}

El resultado es el siguiente:
a instanceof String = true

Operador condicional
Este operador es utilizado para realizar bifurcaciones condicionales de
acuerdo al valor de una expresin. Su formato es el siguiente:

expresin lgica ? sentencia true : sentencia false

Este operador evala el valor de la expresin lgica y si devuelve true,


entonces se ejecuta la primera sentencia (sentencia true) y en caso de que la
expresin lgica devuelva false, entonces se ejecuta la segunda sentencia
(sentencia false).

Ejemplo:
package principal;

public class OperadorCondicional {

public static void main(String[] args) {


int a = 10;
int b = 5;

String resultado = (a < b) ? "a es menor que b" :


"a es mayor que b";
System.out.println(resultado);
}

Programacin Orientada a Objetos De las Heras, Sebastin | 42


El resultado es el siguiente:
a es mayor que b

Concatenacin de cadenas de caracteres


El operador + tambin es utilizado para realizar concatenaciones entre
cadenas de caracteres.

Ejemplo:

package principal;

public class ConcatenacionCadenaCaracteres {

public static void main(String[] args) {


String materia = "Programacin Orientada a
Objetos";
String modulo = "Caractersticas del Lenguaje
Java";

String nombreCompleto = "Materia: " + materia +


"\nMdulo: " + modulo;
System.out.println (nombreCompleto);
}

El resultado es el siguiente:
Materia: Programacin Orientada a Objetos
Mdulo: Caractersticas del Lenguaje Java

Programacin Orientada a Objetos De las Heras, Sebastin | 43


2.4.2- Precedencia de operadores
Cuando tenemos una expresin en la que figuran varios operadores, el
compilador de Java debe elegir un orden para efectuar las operaciones de la
expresin. Este orden est determinado por la precedencia de los
operadores. Analicemos la siguiente expresin:

int resultado = 10 + 20 / 2 - 5 % 2;

En qu orden se ejecutan las operaciones involucradas en la expresin? El


orden de precedencia afecta el resultado final de la expresin. La siguiente
lista define el orden que aplica Java para la ejecucin de los operadores, de
mayor a menor precedencia:

Tipo de Operador
operador

Operadores [ ] . (parmetros) expr++ expr--


posfijos

Operadores ++expr --expr +expr expr ~ !


unarios

Creacin o new (tipo) expr


conversin

Multiplicacin * / %

Suma + -

Desplazamiento << >> >>>

Comparacin < > <= >= instanceof

Igualdad == !=

AND a nivel de &


bit

OR a nivel de ^
bit

XOR a nivel de |

Programacin Orientada a Objetos De las Heras, Sebastin | 44


bit

AND lgico &&

OR lgico ||

Condicional ?:

Asignacin = += -= *= /= %= &= ^= |= <<= >>= >>>=

Los operadores que tienen mayor precedencia tienen mayor prioridad en la


ejecucin de la operacin que aquellos operadores con menor precedencia.

Otro punto importante a tener en cuenta es que todos los operadores


binarios, a excepcin de los operadores de asignacin, se evalan de
izquierda a derecha. Los operadores de asignacin se evalan de derecha a
izquierda, es decir, primero se evala la expresin a la derecha de la
asignacin y dicho resultado es asignado a la variable de la izquierda.

Teniendo en cuenta esta definicin, podemos deducir que de la expresin


anterior, el orden en el que se aplican los operadores es el siguiente:

1. Primero se aplican los operadores de divisin y resto en ese orden,


obteniendo como resultado parciales 10 y 1 respectivamente.

2. Luego se aplican la suma y la resta en ese orden. El resultado de la


expresin es 19.

3. El valor 19 es asignado a la variable resultado.

resultado = 10 + 20 / 2 - 5 % 2

10 1

19

Si deseamos definir en forma explcita un orden de precedencia para la


evaluacin de una expresin, lo podemos hacer utilizando parntesis
balanceados. Si en la expresin anterior deseramos que primero se
evale la suma de 10 + 20 entonces deberamos escribir la expresin de
la siguiente forma:

Programacin Orientada a Objetos De las Heras, Sebastin | 45


int resultado = (10 + 20) / 2 - 5 % 2;

La utilizacin de parntesis modifica el orden de precedencia de la siguiente


manera:

1. Primero se evala la suma de 10 + 20, dando como resultado parcial


el valor 30.

2. Luego se aplican las operaciones de divisin y resto en ese orden,


dando como resultado parciales los valores 15 y 1 respectivamente.

3. Se aplica la operacin resta. El resultado de la resta es 14

4. El valor 14 es asignado a la variable resultado.

resultado = (10 + 20) / 2 - 5 % 2

30

15 1

14
Es recomendable el uso de parntesis, incluso cuando el orden de
precedencia sea obvio, ya que hacen ms fcil a la lectura y al
entendimiento de las expresiones.

Programacin Orientada a Objetos De las Heras, Sebastin | 46


2.4.3- Control de flujo
El uso de instrucciones de control de flujo forma parte de los componentes
esenciales de todo lenguaje de programacin. Mediante el uso de estas
estructuras, podemos indicar que ciertas partes de nuestro cdigo se
ejecuten si cumplen con algunas condiciones. A continuacin vamos a
analizar las siguientes estructuras de control de flujo:

Sentencias condicionales

o Simple

o Doble

o Mltiple

o Switch

Sentencias de iteracin:

o For

o While

o Do while

Sentencias condicionales
Las estructuras de control condicionales son utilizadas para ejecutar un
conjunto de sentencias si se cumple una condicin en particular. La
condicin que se evala debe devolver un resultado lgico (boolean).

Condicional simple

Tiene la siguiente estructura:

if (expresin lgica)
{
sentencias condicionales
}

Si el valor de la expresin lgica se es true, entonces se ejecuta el cdigo


que se encuentra entre llaves.

Si el valor de la expresin lgica se es false, entonces el cdigo que se


encuentra entre llaves no se ejecuta.

Ejemplo:

Programacin Orientada a Objetos De las Heras, Sebastin | 47


package principal;

public class CondicionalSimple {

public static void main(String[] args) {


int a = 10;
if (a > 5)
{
System.out.println("La variable a es mayor que 5");
}
}

El resultado de la ejecucin es:

La variable a es mayor que 5

Si el bloque de cdigo entre llaves se compone de una nica sentencia a


ejecutar entonces se pueden obviar las llaves del bloque de cdigo:

Ejemplo:

package principal;

public class CondicionalSimple {

public static void main(String[] args) {


int a = 10;
if (a > 5)
System.out.println("La variable a es mayor que
5");

El resultado de la ejecucin sigue siendo el mismo al del ejemplo anterior:

La variable a es mayor que 5

Condicional doble

El cumplimiento de una condicin simple permite ejecutar un conjunto de


secuencias, pero muchas veces puede ser deseable ejecutar otro conjunto de
sentencias en caso de que la condicin no se cumpla. En dichos casos se
aplica el condicional doble. Su estructura es la siguiente:

Ejemplo:

if (expresin lgica)
{

Programacin Orientada a Objetos De las Heras, Sebastin | 48


Sentencias condicionales a ejecutar en caso de que
la expresin lgica sea verdadera (true)
}
else
{
Sentencias condicionales a ejecutar en caso de que
la expresin lgica sea falsa (false)
}

Ejemplo:

package principal;

public class CondicionalDoble {

public static void main(String[] args) {


int a = 2;
if (a > 5)
{
System.out.println("La variable a es mayor que
5");
}
else
{
System.out.println("La variable a es menor o
igual que 5");
}
}

El resultado de la ejecucin es:

La variable a es menor o igual que 5

Condicional mltiple

Este tipo de condicional es utilizado cuando se desea evaluar varias


condiciones. Se evala la primera condicin, en caso de que no se cumpla,
se evala la siguiente y as sucesivamente hasta evaluar todas las
condiciones. Su estructura es la siguiente:

if (expresin lgica)
{
Sentencias condicionales a ejecutar en caso de que
la expresin lgica sea verdadera (true)
}
else if (expresin lgica)
{
Sentencias condicionales a ejecutar en caso de que
la expresin lgica sea verdadera (true)

Programacin Orientada a Objetos De las Heras, Sebastin | 49


}
else if (expresin lgica)
{
Sentencias condicionales a ejecutar en caso de que
la expresin lgica sea verdadera (true)
}
.
.
.
else
{
Sentencias condicionales a ejecutar en caso de que
ninguna de las condiciones anteriores se haya
cumplido.
}

El bloque de cdigo else es opcional. Se aplica en el caso de que se quiera


ejecutar un bloque de sentencias en el caso de que ninguna de las
condiciones se haya cumplido.

Ejemplo:

package principal;

public class CondicionalMultiple {

public static void main(String[] args) {


int a = 6;
if (a > 10)
{
System.out.println("La variable a es mayor que
10");
}
else if (a > 8)
{
System.out.println("La variable a es mayor que
que 8");
}
else if (a > 5)
{
System.out.println("La variable a es mayor que
5");
}
else
{
System.out.println("La variable a es menor o
igual que 5");
}
}

Programacin Orientada a Objetos De las Heras, Sebastin | 50


El resultado de le ejecucin es el siguiente:

La variable a es mayor que 5

Las siguientes reglas se aplican para los condicionales:

Puede no haber un bloque else, y si lo hay solamente puede haber


un solo bloque else. Si hay bloques else if, entonces el bloque
else debe figurar despus de los bloques else if.

Puede haber cero o varios bloques else if, y si hay un bloque else,
entonces los bloques else if deben figurar antes del bloque else.

Si se cumple la condicin para un bloque de cdigo else if, entones


las restantes condiciones else if y la condicin else si las hubiere
no son tenidas en cuenta.

Switch

Las sentencias if y switch hacen referencia a sentencias que ayudan a


tomar una decisin. Cuando estamos usando estructuras condicionales de
control de flujo, lo que estamos haciendo es indicarle al compilador que
evale una condicin para determinar qu bloque de cdigo se debe
ejecutar.

El uso de la sentencia switch permite simular el uso de mltiples


condicionales. Analicemos el siguiente cdigo en donde se hace uso de
condicionales mltiples:

package principal;

public class CondicionalMultiple {

public static void main(String[] args) {


int a = 1;
if (a == 3)
{
System.out.println("El valor de a es 3");
}
else if (a == 2)
{
System.out.println("El valor de a es 2");
}
else if (a == 1)
{
System.out.println("El valor de a es 1");
}
else
{
System.out.println("La variable a tiene un valor
desconocido");

Programacin Orientada a Objetos De las Heras, Sebastin | 51


}
}

El uso de condicionales mltiples en el cdigo anterior podra ser reescrito


de la siguiente manera:

package principal;

public class CondicionalSwitch {

public static void main(String[] args) {


int a = 1;
switch (a)
{
case 3:
System.out.println("El valor de a es 3");
break;
case 2:
System.out.println("El valor de a es 2");
break;
case 1:
System.out.println("El valor de a es 1");
break;
default:
System.out.println("La variable a tiene un
valor desconocido");
}
}

El resultado de la ejecucin es el siguiente:

El valor de a es 1

El uso de palabra clave break le indica al compilador que desestime el


resto de las condiciones case. Si no hiciramos uso de la sentencia break
el compilador ejecutara el resto de las condiciones en cascada. Lo veamos
en el siguiente ejemplo:

package principal;

public class CondicionalSwitch {

public static void main(String[] args) {


int a = 2;
switch (a)
{
case 3:
System.out.println("El valor de a es 3");

Programacin Orientada a Objetos De las Heras, Sebastin | 52


case 2:
System.out.println("El valor de a es 2");
case 1:
System.out.println("El valor de a es 1");
default:
System.out.println("La variable a tiene un
valor desconocido");
}
}

El resultado de la ejecucin es el siguiente:

El valor de a es 2
El valor de a es 1
La variable a tiene un valor desconocido

Como podemos ver, la condicin en la que la variable a es igual a 2 se


cumpli, razn por la cual se ejecut la sentencia correspondiente a dicha
condicin. Pero tambin se ejecutaron el resto de las condiciones que se
encuentran por debajo de sta en cascada, motivo por el cual es importante
saber cundo incluir la sentencia break en el uso del condicional switch.

La sentencia switch es utilizada para seleccionar entre varias sentencias


de acuerdo al valor de cierta expresin.

La sentencia default es opcional y la misma se aplica en el caso de que


ninguna de las condiciones anteriores se haya cumplido.

Sentencias iterativas
Las sentencias iterativas son utilizadas para ejecutar un proceso o un
conjunto de sentencias repetidas veces.

While

La sentencia while es utilizada para ejecutar un bloque de cdigo en


forma sucesiva mientras se cumpla una condicin. Esta sentencia tiene la
siguiente estructura:

while (expresin booleana)


{
Sentencias que se ejecutan mientras se cumpla la
condicin
}

Ejemplo:

package principal;

public class IteracionWhile {

Programacin Orientada a Objetos De las Heras, Sebastin | 53


public static void main(String[] args) {
int a = 0;
while (a < 3)
{
a++;
System.out.println("El valor de a es: " + a);
}
}

El resultado de la ejecucin es:

El valor de a es: 1
El valor de a es: 2
El valor de a es: 3

Do While

Esta sentencia es similar a la sentencia while pero tiene la diferencia que


la condicin del ciclo se evala al final del ciclo. Esto hace que haya al
menos una ejecucin del ciclo.

do
{
Sentencias
}
while (expresin booleana);

Ejemplo:

package principal;

public class IteracionDoWhile {

public static void main(String[] args) {


int a = 0;
do
{
a++;
System.out.println("El valor de a es " + a);
}
while (a < 3);
}

El resultado de la ejecucin es el siguiente:

El valor de a es 1
El valor de a es 2
El valor de a es 3

Programacin Orientada a Objetos De las Heras, Sebastin | 54


For

Este ciclo es similar al ciclo while pero puede resultar ms sencillo de


utilizar en aquellos escenarios en donde estemos realizando conteos o
indexaciones. Este ciclo combina inicializacin de variables,
evaluacin de condiciones e incremento de las variables. Su
estructura es la siguiente:

for (inicializacin; condicin; incremento)


{
Sentencias
}

Veamos un ejemplo para entender mejor esta sentencia iterativa:

package principal;

public class IteracionFor {

public static void main(String[] args) {


for (int a=1 ; a<3 ; a++) {
System.out.println("El valor de a es: " + a);
}
}

El resultado de la ejecucin es:

El valor de a es: 1
El valor de a es: 2

En el momento que el compilador lee la sentencia for esto es lo que


sucede:

- Se declara una variable a de tipo int y la misma es inicializada con


el valor 1.

- Se evala la condicin de que la variable a sea menor a 3 y en caso


positivo se ejecuta el bloque de cdigo.

- Se ejecuta el bloque de cdigo que ordena la impresin en pantalla


de la variable a.

- Se incrementa en una unidad la variable a.

- Se evala nuevamente si la variable a es menor a 3 y en caso


positivo se vuelve a ejecutar el bloque de cdigo.

- Estos pasos son repetidos hasta que la condicin del ciclo (a < 3) no
se cumpla.

Programacin Orientada a Objetos De las Heras, Sebastin | 55


2.5- Aplicaciones bsicas en
Java
Aplicacin 1: Ingreso de datos

La siguiente aplicacin tiene por objetivo realizar la toma de datos desde el


teclado y luego mostrar los datos ingresados en pantalla.

Para realizar la carga de datos desde el teclado se utiliza la siguiente


sentencia:

BufferedReader br = new BufferedReader(new


InputStreamReader(System.in));

Se crea una instancia br de la clase BufferedReader. Esta clase


pertenece al cuerpo de clases de la API de Java y tiene una serie de mtodos
que permiten la lectura de texto a partir de un flujo de entrada de datos.

package principal;

/* Las siguiente clases son importadas para


* permitir la lectura de entradas
* desde el teclado
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class RecoleccionDatos {

public static void main(String[] args) throws


IOException {
/* La siguiente sentencia es utilizada para la
* lectura de entradas de caracteres desde el
teclado.
* Una vez creado el objeto br, para realizar
* cargas desde el teclado es suficiente con
* invocar a la sentencia br.readLine()
*/
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));

System.out.println("INGRESO DE DATOS");

System.out.println("Ingrese su nombre: ");


String nombre = br.readLine();

System.out.println("Ingrese su apellido: ");


String apellido = br.readLine();

System.out.println("Ingrese su edad: ");

Programacin Orientada a Objetos De las Heras, Sebastin | 56


String edad = br.readLine();

System.out.println("Usted ha ingresado los


siguientes datos:");
System.out.println("Nombre: " + nombre);
System.out.println("Apellido: " + apellido);
System.out.println("Edad: " + edad);
}

Si ejecutamos la aplicacin, la misma nos solicitar el ingreso de datos a


travs de la consola.

INGRESO DE DATOS
Ingrese su nombre:
Sebastian
Ingrese su apellido:
de las Heras
Ingrese su edad:
25
Usted ha ingresado los siguientes datos:
Nombre: Sebastian
Apellido: de las Heras
Edad: 25

Aplicacin 2: Clculo de potencias

La siguiente aplicacin tiene por objetivo realizar el clculo potencias de un


nmero ingresado por teclado. Tambin se debe ingresar un nmero que
establece el lmite mximo hasta donde se debe aplicar el clculo de la
potencia. Las sucesivas potencias se deben mostrar en pantalla.

package principal;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Potencias {

public static void main(String[] args) throws


IOException {
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));

System.out.println("CLCULO DE POTENCIAS");

System.out.println("Ingrese un nmero para


calcular su potencia: ");

Programacin Orientada a Objetos De las Heras, Sebastin | 57


int base = Integer.parseInt(br.readLine());

System.out.println("Ingrese el lmite mximo de


potencia: ");
int limite = Integer.parseInt(br.readLine());

System.out.println("Potencias sucesivas del


nmero " + base +
" hasta alcanzar el lmite " + limite);

int potencia = base;


while (potencia <= limite) {
System.out.println(potencia);
potencia = potencia * base;
}

En el cdigo de la aplicacin se hace uso del mtodo


Integer.parseInt(). Este mtodo es utilizado para tomar una cadena
de caracteres y devolver un valor numrico entero (int) a partir de la
cadena. En nuestro ejemplo es utilizado para obtener los valores numricos
correspondientes a la lectura de los nmeros que representan la base y el
lmite.

Si ejecutamos la aplicacin podemos obtener el siguiente resultado:

CLCULO DE POTENCIAS
Ingrese un nmero para calcular su potencia:
2
Ingrese el lmite mximo de potencia:
100
Potencias sucesivas del nmero 2 hasta alcanzar el
lmite 100
2
4
8
16
32
64

Aplicacin 3:

La siguiente aplicacin integra las aplicaciones 1 y 2. El usuario debe


seleccionar qu operacin desea ejecutar de acuerdo a un listado de
operaciones.

package principal;

Programacin Orientada a Objetos De las Heras, Sebastin | 58


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class SeleccionOperacion {

public static void main(String[] args) throws


IOException {
System.out.println("PROGRAMACIN ORIENTADA A
OBJETOS");
System.out.println("Operaciones");
System.out.println("A. Recoleccin de
datos");
System.out.println("B. Clculo de
potencias");
System.out.println("C. Salir");

BufferedReader br = new BufferedReader(new


InputStreamReader(System.in));
char opcion;
do
{
System.out.println("Seleccione una
opcin (A, B, C): ");
opcion = (char) System.in.read();
System.out.println("Opcin seleccionada:
" + opcion);
System.in.read(); // Se elimina del
buffer de entrada el caracter <Enter>

switch (opcion)
{
case 'A':
System.out.println("INGRESO DE
DATOS");

System.out.println("Ingrese su
nombre: ");
String nombre = br.readLine();

System.out.println("Ingrese su
apellido: ");
String apellido = br.readLine();

System.out.println("Ingrese su
edad: ");
String edad = br.readLine();

System.out.println("Usted ha
ingresado los siguientes datos:");
System.out.println("Nombre: " +
nombre);
System.out.println("Apellido: "
+ apellido);
System.out.println("Edad: " +
edad);

Programacin Orientada a Objetos De las Heras, Sebastin | 59


break;
case 'B':
System.out.println("CLCULO DE
POTENCIAS");

System.out.println("Ingrese un
nmero para calcular su potencia: ");
int base =
Integer.parseInt(br.readLine());

System.out.println("Ingrese el
lmite mximo de potencia: ");
int limite =
Integer.parseInt(br.readLine());

System.out.println("Potencias
sucesivas del nmero " + base +
" hasta alcanzar el lmite "
+ limite);

int potencia = base;


while (potencia <= limite) {
System.out.println("\t" +
potencia);
potencia = potencia * base;
}
break;
case 'C':
System.out.println("Saliendo de
la aplicacin");
break;
default:
System.out.println("Opcin
ingresada incorrecta.");
}
}
while (opcion != 'A' && opcion != 'B' &&
opcion != 'C');
}

Programacin Orientada a Objetos De las Heras, Sebastin | 60


Bibliografa Lectura 3
Sierra Kathy, Bates Bert, (2008), SCJP Sun Certified Programmer for Java 6
Study Guide (Exam 310-065), EE.UU, Editorial McGraw-Hill.

Gosling James, McGilton Henry, (1996), The Java Language Environment,


EE.UU.

Bruce Eckel, (2006), Thinking in Java (4a ed.), EE.UU, Editorial Prentice Hall.

Wikipedia, (2013), Plataforma (informtica), Recuperado el 14/06/2011 de


http://es.wikipedia.org/wiki/Plataforma_%28inform%C3%A1tica%29

Wikipedia, (2013), Mquina virtual Java, Recuperado el 14/06/2011 de


http://es.wikipedia.org/wiki/M%C3%A1quina_virtual_Java

Wikipedia, (2013), Unicode, Recuperado el 14/06/2011 de


http://es.wikipedia.org/wiki/Unicode

The Java Tutorials (Oracle), (2011), Learning the Java Language,


Recuperado el 14/06/2011 de
http://download.oracle.com/javase/tutorial/java/TOC.html

Programacin Orientada a Objetos De las Heras, Sebastin | 61