Вы находитесь на странице: 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
Java API
Plataforma:
En
Informtica,
una
plataforma es un sistema
que sirve como base para
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)

Plataforma
Java

Mquina Virtual Java

Plataforma de Hardware

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
compilados utilizando una
(compilador javac). Se deben
cada uno de ellos tendremos
formato .class.

binarios, los archivos fuentes son


aplicacin especfica para este fin
compilar todos los archivos fuentes y por
el archivo binario correspondiente con

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)


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

MiAplicacion.java

Se ejecuta el comando javac

El compilador se encarga de
generar los archivos binarios a partir
de los archivos fuentes

Compilador
javac

Archivo binario (.class)


Los archivos binarios contienen
instrucciones de bajo nivel
(bytecode)

MiAplicacion.class

Se ejecuta el comando java

Mquina Virtual
Java

Mi Aplicacin

JVM

La JVM se encarga de
interpretar las instrucciones de
los archivos binarios

El resultado del proceso es la


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

boolean

Representa 1 bit de informacin aunque


su tamao no est definido en forma
precisa.

false, true

char

16

Caracteres Unicode

byte

-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

Unicode:
El Estndar Unicode es un
estndar de codificacin de
caracteres diseado para
facilitar el tratamiento
informtico, transmisin y
visualizacin de textos de
mltiples
lenguajes
y
disciplinas
tcnicas
adems de textos clsicos
de lenguas muertas. El
trmino Unicode proviene
de los tres objetivos
perseguidos:
universalidad,
uniformidad y unicidad.
(Wikipedia, 2013)

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
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
asumiendo que dicho dgito est en el rango entre 0 y 65535.
Ejemplo:
package principal;
public class CaracteresSimples
{
public static void main(String args[])
{
System.out.println("Variables char");
char variable_char1 = 'a';
System.out.println("char: " + variable_char1);
char variable_char2 = 64;
System.out.println("char: " + variable_char2);
}
}

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:
Ejemplo:

Programacin Orientada a Objetos


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
a -= b. El valor de a
a *= b. El valor de a
a /= b. El valor de a
a %= b. El valor de a

es
es
es
es
es

12
10
20
10
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
" + (a > b));
System.out.println("Operador
que b?: " + (a >= b));
System.out.println("Operador
" + (a < b));
System.out.println("Operador
que b?: " + (a < b));
System.out.println("Operador
+ (a == b));
System.out.println("Operador
b?: " + (a != b));
}

> Es a mayor que b?:


>= Es a mayor o igual
< Es a menor que b?:
<= Es a menor o igual
== Es a igual a b?: "
!= Es a distinto a

Programacin Orientada a Objetos De las Heras, Sebastin | 39

El resultado es:
El valor
El valor
Operador
Operador
Operador
Operador
Operador
Operador

de a es 10
de b es 5
> Es a mayor que b?: true
>= Es a mayor o igual que b?: true
< Es a menor que b?: false
<= Es a menor o igual que b?: false
== Es a igual a b?: false
!= 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

&

AND

a&b

OR

a|b

&&

Short AND

a && b

||

Short OR

a|b

Negacin

!b

Resultado
Devuelve true si a y b
valen true.
Si a b valen false,
entonces el operador devuelve
false.
Devuelve true si a b
valen true.
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.
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.
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.
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
System.out.println("El
System.out.println("El
System.out.println("El

valor
valor
valor
valor

de
de
de
de

a
b
c
d

es:
es:
es:
es:

"
"
"
"

+
+
+
+

a);
b);
c);
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
posfijos

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

Operadores
unarios

++expr --expr +expr expr ~ !

Creacin o
conversin

new (tipo) expr

Multiplicacin

* / %

Suma

+ -

Desplazamiento
Comparacin
Igualdad

<< >> >>>


< > <= >= instanceof
== !=

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
valor desconocido");
}
}

un

}
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
valor desconocido");
}
}

un

}
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
calcular su potencia: ");

un

nmero

para

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