Vous êtes sur la page 1sur 41

1.

0 Comenzando
Este trail provee de todo lo que necesitars saber para empezar a programar con Java.

1.1 El fenmeno de la tecnologa Java.


Provee de un acercamiento a la tecnologa Java. Se discute la programacin y la plataforma. Tambin una breve
visin de lo que es la tecnologa y lo que puede hacer tu vida mas sencilla.

1.2 La aplicacin Hola mundo!.


Este tema trata de acercarte a lo que tienes que descargar, que tienes que instalar y que escribir para crear una
aplicacin. Provee de informacin por separado para NetBeans, Microsoft Windows, Solaris, Linux y Mac.

1.3 Un mirada mas profunda a Hola mundo!.


Se describe cada seccin del cdigo en detalle. Cubre los comentarios del cdigo fuente y el mtodo main.

1.4 y 1.5 Ejercicios de compresin y ejercicios resueltos.


Una vez que hayas acabado el capitulo, podrs verificar que has asimilado los conceptos.

1.6 Problemas mas comunes y las soluciones.


En este lugar vas a encontrar las soluciones a la compilacin o a la ejecucin de programas.

El fenmeno de la tecnologa Java.


Hablemos sobre que es la tecnologa Java, parece estar en todas partes pero que es? La siguiente seccin
explica como es el lenguaje de programacin y la plataforma, y muestra un acercamiento a lo que esta
tecnologa puede hacer por ti.
Que es la tecnologa Java?
Que puede hacer Java?
Como Java influir en mi vida?

La tecnologa Java
La tecnologa Java engloba la plataforma y el lenguaje.

El lenguaje Java
El lenguaje de programacin Java es un lenguaje de alto nivel que se caracteriza por las siguientes
caractersticas:
Simple
Orientado a objetos
Distribuible
Multihilos
Dinmico

Arquitectura neutra
Porttil
Alto rendimiento
Robusto
Seguro

Cada uno de las caractersticas se explica en El entorno del lenguaje Java, una parrafada escrita por James
Gosling y Henry McGilton.
En el lenguaje Java, todo el cdigo fuente se escribe primero en un archivo con texto plano y con el nombre del
archivo terminado en .java. Las fuentes compiladas producen archivos .class y se hace mediante el uso del
compilador javac.
Un archivo .class no contiene cdigo nativo para tu procesador, en su lugar contiene bytecode, que es el
lenguaje de la mquina virtual Java. La herramienta de ejecucin ejecuta tu aplicacin en una instancia de la
JVM.

Ya que la JVM est disponible en muchos sistemas operativos, el mismo fichero .class es capaz de ejecutarse en
Windows, Solaris, Linux, o Mac.
Algunas mquinas virtuales como JAVA SE HotSpot at a Glance, ejecutan pasos adicionales en tiempo de
ejecucin para dar a tu aplicacin mas velocidad. Esto incluye tareas como buscar perdidas de rendimiento y
recompilacin (al modo nativo) de secciones de cdigo usadas frecuentemente.

La plataforma Java
La plataforma es el entorno donde el programa se ejecuta, ya sea por hardware o software. Ya hemos
mencionado, algunas de las plataformas mas comunes como Windows, Linux, Solaris y Mac. La mayora de las
plataformas pueden ser descritas como una combinacin de sistemas operativos y hardware. La plataforma Java
difiere de las otras plataformas que es nicamente software.
La plataforma Java tiene dos componentes:
La mquina virtual Java
Las interfaces de programacin de la aplicacin (APIs).
Ya te hemos presentado la mquina virtual, es la base para la plataforma Java y se encuentra dentro de otro
sistema operativo con base parcial de hardware.
Las APIs son una gran coleccin de software listo para usar que proveen de otras capacidades. Son un grupo de

libreras o clases e interfaces llamadas paquetes. En la siguiente seccin, Qu puede hacer la tecnologa Java?
Resaltaremos algunas de las funcionalidades que proveen las APIs.

Como una plataforma independiente, la plataforma Java puede ser un poco mas lenta que el cdigo nativo. Sin
embargo, los avances en el compilador y en la mquina virtual estan trayendo mejor rendimiento, cercano al
cdigo nativo sin restar portabilidad.
Los trminos Mquina Virtual Java quieren decir, Mquina Virtual para la plataforma Java.

Que puede hacer la tecnologa Java?


El propsito general es el de un lenguaje de alto nivel con una poderosa plataforma. Cada implementacin de
Java te da las siguientes caractersticas:
Herramientas de desarrollo. Las herramientos de desarrollan te dan de todo lo que necesitas para
compilar, ejecutar, monitorizar, debuguear y documentar tus aplicaciones. Tambin como nuevo
desarrollador, la principal herramienta que usars ser el compilador javac, el lanzador java y la
herramienta de documentacin javadoc.
Interfaces de programacin de la aplicacin (API, Application Programming Interface).Las APIs
proveen de funcionalidad al lenguaje Java. Ofrece un amplio abanico de clases preparadas para ser
usadas en tu aplicacin. Crea toda clase de objetos, desde los bsicos a internet y seguridad, base de
datos XML y mas. Las APIs del core son muy extensas. Para ver una aproximacin de lo que contiene,
puede leer la documentacin de la plataforma Java 7.
Utilizacin de la tecnologa. El software JDK provee de mecanismos estndares tales como Java Web y
plugin para desarrollar tus aplicaciones a los usuarios finales.
Interfaz de herramientas para el usuario. La caja de herramientas de Swing y Java 2D hacen posible
crear sofisticadas interfaces de usuario (GUIs).
Integracin de libreras. Integra libreras como IDL API, JDBC, Java Naming and Directory Interface
(JNDI), RMI, y Java Remote Method Invocation over Internet Inter-ORB Protocol Technology (JAVA
RMI-IIOP Technology) hace posible el acceso a base de datos y la manipulacin de objetos remotos.

Cmo cambiar mi vida la tecnologa Java?


No podemos prometerte la fama, fortuna o incluso un trabajo si aprendes a programar java. Pero si podemos
decirte que hars tus programas con menor esfuerzo que si lo hicieras con otros lenguajes. Creemos que la
tecnologa Java te ayudar con:
Empezar rpidamente. Aunque la programacin en Java es absolutamente orientada a objetos, es fcil

de aprender, especialmente para programadores familiarizados con C o C++.


Escribir menos cdigo. En comparacin con la mtrica de un programa (nmero de clases, nmero de
mtodos, etc) te podemos decir que un programa escrito en Java ocupa cuatro veces menos que un
programa escrito en C++.
Escribe mejor cdigo. El lenguaje de programacin Java te nima a escribir usando buenas prcticas, y
el recogedor automtico de basuras te ayuda con las prdidas de memoria. Orientado a objetos, con la
arquitectura de Java Beans y su amplio rango de posibilidades, lo hacen fcilmente extensible a otras
API que tu permitas su uso, cdigo probado y contiene los mnimos bugs.
Desarrolla programas mas rpidamente. El lenguaje de programacin Java es mas simple que el C++, y
por eso, tus desarrollos pueden ser completados en la mitad de tiempo. Tus programas requieren de
menos lneas de cdigo.
Distribuye software mas rpidamente. Con Java Web Started, los usuarios podrn ejecutar tus
aplicaciones con un simple click de ratn. Una versin automtica comprueba el arranque y asegura al
usuario estar siempre actualizado con la ltima versin de tu software. Si hay una actualizacin
disponible, Java Web Start automticamente ejecutar la actualizacin.

La aplicacin Hello world! Con NetBeans.


Ya es hora de escribir nuestra primera aplicacin. Estas instrucciones detalladas se usan para los usuarios de
NetBeans. Puedes usar Eclipse tambin, el uso es bastante parecido. Una IDE como NetBeans o Eclipse se
ejecuta sobre Java, lo que significa que si existe un JDK para ese sistema operativo, puedes usar cualquiera de
estas IDEs.
Comprueba que tienes lo necesario.

Para escribir tu primer programa necesitars:


1. El kit de desarrollo de Java (JDK 7 cuando se escribi este manual)

2. NetBeans o Eclipse

Creando tu primera aplicacin


Tu primera aplicacin, Hello world, mostrar simplemente un texto. Para crear este programa vas a:
Crear un proyecto.
Cuando creas un proyecto, creas un entorno en el cual se van a construir y ejecutar tu
aplicacin. Al usar un IDE te ahorras lo que haras desde la consola de comandos. Puedes
construir o ejecutar tus aplicaciones tan solo eligiendo un opcin en el men.
Aadir cdigo al fichero que acabas de generar.
Un fichero fuente contiene cdigo escrito en Java, que t y otros programadores
pueden entender. Esto forma parte del proceso de crear un proyecto con una IDE. Los
ficheros se crean de forma automtica. Modificars el cdigo fuente aadiendo tu
mensaje.
Compilar el fichero fuente para obtener un fichero .class.

El IDE invoca a javac que tomar tu fichero fuente y traducir el texto de


forma que la mquina virtual pueda entenderlo. Las instrucciones obtenidas
se llaman bytecode.
Ejecuta el programa.
La IDE invoca tambin tambin al lanzador, se llama java, que usa la
mquina virtual para ejecutar la aplicacin.

Crear un proyecto
Para crear un proyecto:
1. Ejecuta la IDE (NetBeans o Eclipse).

2. En el men File elige, New Project.

3. En la ventana elige, aplicacin Java.

4. En las pginas Name y Location haz lo siguiente:


En el campo Project Name, pon Hello World App.
En el campo Create Main Field, helloworldapp.HelloWorldApp.
Dejar seleccionado el checkbox Set as Main Project.

6. Click en Finish.
El proyecto se ha creado y el IDE esta listo. Deberas ver los siguientes componentes:
La ventana de proyecto, que contiene un rbol de los componentes del proyecto, incluyendo los
ficheros fuente, libreras de las que puedas depender, y dems etc.
La ventana de edicin llamada HelloWorldApp.
La ventana de navegacin, que te ser de utilidad para navegar entre las diferentes clases.

Aade la plataforma JDK 7 si es necesario.


Con Eclipse puedes saltarte todos estos pasos, no son necesarios y tampoco existen.
Podra ser necesario aadir JDK7 a la lista de plataformas disponibles. Para hacer esto, elige Tools / Java
Plataforms, como se muestra aqu:

Si no ves JDK7 (puede que aparezca como 1.7 o 1.7.0) en la lista, haz click en Add Platform, dirigete a tu
directorio Java y clica en Finish. Ahora deberas ver la nueva plataforma.

Para seleccionar JDK por defecto para tus proyectos, puedes ejecutar el IDE con jdkhomes en la lnea de
comandos, o poniendo la ruta del JDK en netbeans_j2sdkhome en tu directorio de instalacin / etc /
netbeans.conf.
Para especificar este JDK en el proyecto actual nicamente, selecciona la aplicacin Hello World App en el
panel de proyectos, elige File / Project Properties (Hello World App), click en Libreries y luego selecciona JDK
7 bajo la plataforma Java en el men de abajo. Deberias ver una pantalla similar a esta:

Aadir cdigo al fichero del cdigo fuente.


Cuando hayas creado este proyecto, dejaste la checkbox marcada con Create Main Class. La IDE ha creado el
cdigo necesario por ti. Solo tienes que aadir el mensaje escribiendo:
System.out.println("Hello World!"); // Display the string.
Si quieres, puedes reemplazar las lneas de comentario:
/**
*
* @author
*/
Por
/**
* The HelloWorldApp class implements an application that
* simply prints "Hello World!" to standard output.
*/

Estas lneas de comentario no afectan en absoluto en como el programa va a funcionar, sern ignoradas por el
compilador. Slo son tiles a los programadores.

Cuidado cuando escribas a y A


Todo el cdigo, comandos, nombres de ficheros se manejan exactamente tal como se han nombrado. El
compilador y el lanzador son sensibles a las maysculas, asi que en todo momento debes ser consciente de que:
HelloWorldApp no es lo mismo que helloworldapp
Graba tus cambios en File / Save
Tu fichero debera parecerse a esto:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package helloworldapp;
/**
* The HelloWorldApp class implements an application that
* simply prints "Hello World!" to standard output.
*/
public class HelloWorldApp {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}

Compila el fichero fuente. Obtienes un fichero class.


Para compilar el cdigo fuente, elige Run / Build Main Project desde el men principal. La ventana de salida se
abre y mostrar una salida similar a lo que ves aqu:

Si obtienes el mensaje BUILD SUCCESSFUL, felicidades. Acabas de compilar tu programa.

Si por el contrario obtienes BUILD FAILED, probablemente tienes un error de sintaxis en tu cdigo. Los
errores se reportan en la ventana de salida como un hipervnculo. Con doble click puedes navegar a la fuente
del error. Luego podrs arreglar el error y construir tu proyecto.
Cuando hayas obtenido el bytecode, obtendrs un fichero HelloWorldApp.class. Puedes ver donde se ha
generado el nuevo fichero abriendo la ventana Files y expandiendo el nodo, tal como se muestra:

Ahora que has construido el proyecto, puedes ejecutarlo.

Ejecutar el programa
Desde la barra de men, elige Run / Run Main Project.
La ventana de salida mostrar el mensaje:

Continuando el tutorial con el IDE de NetBeans


Las siguientes pginas del tutorial explicaran el cdigo de esta aplicacin. Despus de eso, las lecciones se
mostraran en un camino mas profundo hacia las caractersticas del core, y proveen de mas ejemplos.
Aunque el resto del tutorial no da instrucciones especficas sobre el uso de la IDE, puedes escribir y ejecutar de
forma sencilla tu propio cdigo.

El autor de esta traduccin te anima a que pruebes Eclipse, para usar las mismas herramientas que usan los
desarrolladores originales de L2J, adems, en mi parecer es mas intuitivo y requiere de menos acciones para
crear, compilar, y debuguear tu cdigo.
Los siguientes puntos describen el comportamiento que normalmente usars en el IDE:
Una vez que hayas creado un proyecto, puedes aadir ficheros al proyecto usando New File.
Puedes compilar y ejecutar individualmente (lo contrario que sera ejecutar un proyecto).
Puedes crear diferentes proyectos IDE que incluyan mas de un fichero fuente.
Mientras escribes cdigo, una caja de autocompletado se abre automticamente para ahorrarte el
tiempo que necesitas para escribir el comando completo. Si no quieres esta ayuda, Tools / Options /
Editor y click en la pestaa de Code Completion y desmarca el Auto Popup Completion.
Si quieres renombrar el nodo de un fichero fuente en la ventana de proyectos, elige Refactor desde el
men principal. El IDE te preguntar el nombre en una caja de dilogo y actualizar el cdigo del
proyecto que se ha referido a esta clase.
Para mas informacin, tienes la documentacin de NetBeans aqu.

Una mirada mas cercana a la aplicacin Hello World.


Ahora que has visto la aplicacin (y quizs la hayas compilado y ejecutado), puedes estar preguntndote como
funciona.
Aqu est el cdigo otra vez:
class HelloWorldApp {
public static void main(String[] args) {
System.out.println(Hello World!); // Display the string.
}
}
La aplicacin Hello World consiste en tres componentes primarios, el comentario del cdigo fuente, la
definicin de la clase HelloWorldApp y el mtodo main. La siguiente explicacin que te dar un entendimiento
bsico del cdigo, pero una implicacin mas profunda sern solo evidentes cuando hayas terminado de leer este
tutorial.

Comentarios del cdigo fuente


El siguiente cdigo define los comentarios de Hello World:

/**
* The HelloWorldApp class implements an application that

* simply prints Hello World! to standard output.


*/
Los comentarios son ignorados por el compilador pero son tiles para otros programadores. La programacin
en Java soporta tres clases de comentarios:
// Este es un comentario
/* Este es otro comentario */
/**
* y este es el ultimo
*/
El compilador ignorar estas lneas, no aparecen en el cdigo del fichero class.

La definicin de la clase HelloWorldApp


El siguiente texto define la clase:
class HelloWorldApp2 {
public static void main(String[] args) {
System.out.println("Hello World!); // Display the string.
}
}
Como se ha mostrado arriba, la forma bsica para definir una clase es la palabra clave class seguida del nombre
encerrando el cdigo entre llaves.

El mtodo main
El siguiente cdigo muestra la definicin del mtodo main():
public static void main(String[] args) {
System.out.println("Hello World!); // Display the string.
}
En Java cada aplicacin debe tener un mtodo cuya firma es:
public static void main(String[] args)
Los modificadores public y static pueden ser escrito en otro orden, pero la convencin es usarlo en el orden que
se ha mostrado. Los argumentos pueden usar el nombre que quieras, lo habitual es poner args, o argv.
El mtodo main() es similar a la funcin main en C y C++, es el punto de entrada de tu aplicacin y
subsecuentemente invocar los otros mtodos requeridos por tu programa.
El mtodo main() acepta un solo argumento: un array de elementos de tipo String.
Este array es el mecanismo a travs del cual en sistema en tiempo de ejecucin le pasa informacin a tu
aplicacin. Por ejemplo:

java MyApp arg1 arg2


Cada cadena en el array se llama argumento en la lnea de comando. Esto permite a los usuarios influir en la
operacin de la aplicacin sin recompilarla. Por ejemplo, un programa que permita al usuario ordenar los datos
en orden descendente podra usar esta lnea de comando:
-descending
La aplicacin HelloWorldApp ignora los argumentos de la lnea de comandos, pero deberas de haberte dado
cuenta de que tales argumentos existen.
Finalmente, la lnea:
System.out.println("Hello World!");

Usa la clase System de la librera para imprimir el mensaje. Parte de esta librera (tambin conocida como la
Interface de programacin de la Aplicacin (API)) ser vista reiteradamente en este tutorial.

Preguntas y ejercicios: Empezando


Preguntas:
Pregunta 1: Cuando compilas un programa escrito en Java, el compilador convierte el cdigo legible por
humanos en cdigo fuente para la plataforma independiente de Java. Como se llama el cdigo de esta
plataforma independiente?
Pregunta 2: Cuales de estos no son vlidos como lnea de comentario?
a. /** comment */
b. /* comment */
c. /* comment
d. // comment
Pregunta 3: Que es la primera cosa que tienes que mirar si ves el siguiente error en tiempo de ejecucin?
Exception in thread main java.lang.NoClassDefFoundError:
HelloWorldApp.java.
Pregunta 4: Cual es la firma correcta del mtodo main()?
Pregunta 5: Cuando se declara el mtodo main(), cual modificador debera ir primero, public o static?
Pregunta 6: Que parmetros define el mtodo main()?

Ejercicios
Ejercicio 1: Cambia el texto del programa HelloWorldApp.java.
Ejercicio2: Puedes encontrar una ligera modificada versin de HelloWorldApp:
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of Oracle or the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// INTENTIONALLY UNCOMPILABLE!
/**
* The HelloWorldApp class implements an application that
* simply prints "Hello World!" to standard output.
*/
class HelloWorldApp2 {
public static void main(String[] args) {
System.out.println("Hello World!); // Display the string.
}
}

Est cdigo, contiene un error, arrglalo para que pueda compilar y ejecutarse. Cual era el error?

Respuestas:
Pregunta 1: El cdigo producido por la compilacin para la plataforma se le llama bytecode.
Pregunta 2: La opcin C es un comentario invalido.
Pregunta 3: Cuando aparece un error de tipo NoClassDefFoundError es que la clase no se ha encontrado.
Tienes que verificar el classpath.
Pregunta 4: La firma correcta para el mtodo main es:
public static void main(String [] args) o public static void main(String args)
Pregunta 5: El orden de los modificadores es indiferente, pero por convencin se escribe antes public y luego
static.
Pregunta 6: Los parmetros que se definen en el mtodo main() es slo uno, y se trata de un array de tipo
String, con un nombre cualquiera pero normalmente se usa args.

Ejercicios
Ejercicio 1: Cambiar el texto del mensaje:

System.out.println("Hola me mudo!");
Ejercicio 2: El error de la versin ligeramente modificada. Cuando intentas compilar el programa, el
compilador arroja en la consola:
HelloWorldApp2.java:7: unclosed string literal
System.out.println("Hello World!); //Display the string.
^
HelloWorldApp2.java:7: ')' expected
System.out.println("Hello World!); //Display the string.
^
2 errors
Para arreglar este fallo, necesitas cerrar las comillas de la cadena de texto. Aqu est la lnea de cdigo
corregida:
System.out.println("Hello World!"); //Display the string.

Problemas y soluciones
Problemas del compilador
Los errores comunes sobre Windows:
javac is not recognized as an internal or external command, operable program or batch file
Si recibes este error, Windows no puede encontrar el compilador (javac).
Aqu hay una manera de decirle a windows donde encontrar javac. Supongamos que has instalado JDK en
c:\jdk1.7.0. En el prompt deberas escribir el siguiente comando y presionar Enter.
C:\jdk1.7.0\bin\javac HelloWorldApp.java
Si eliges esta opcin, tendrs que preceder con la ruta de donde se encuentra Java cada vez que quieras usar
cualquier comando Java, como java o javac. Para evitarlo, consulta la seccin de actualizacin de la variable
PATH en las instrucciones de instalacin de JDK7.
Class names, HelloWorldApp, are only accepted if annotation processing is explicitly requested
Si recibes este error es que has olvidado incluir la extensin .java al querer compilar el archivo con tu cdigo
fuente. Recuerda, se usa javac programa.java, no javac programa.

Problemas en tiempo de ejecucin


Exception in thread main java.lang.NoClassDefFoundError: HelloWorldApp
Si recibes este error, java no ha encontrado el fichero con el bytecode, HelloWorldApp.class.
Uno de los lugares donde java intenta encontrar tu fichero .class es en tu directorio actual. Asi que si .class est
en c:\java, deberas de cambiar tu directorio actual a ese. Para cambiar tu directorio, escribe el siguiente
comando en el prompt y presiona Enter:
cd c:\java
El prompt debera de cambiar a C:\java. Si escribes dir en el prompt, deberas ver tus ficheros .java y .class.
Ahora escribe nuevamente java HelloWorldApp nuevamente.
Si todava tienes problemas, deberas de editar tu variable CLASSPATH. Para ver si esto es necesario, intenta
trastear la variable con este comando:
set CLASSPATH=

Ahora prueba otra vez java HelloWorldApp. Si el programa funciona ahora, tendrs que cambiar tu variable
CLASSPATH. Para editar esta variable, consulta Updating the Path Variable en la seccin de instalacin del
JDK7. La variable CLASSPATH se edita de la misma manera.
Could not find or load main class HelloWorldApp.class
Un error comn en los principiantes es intentar ejecutar el lanzandor java sobre el fichero .class que has creado
con el compilador. Por ejemplo, obtendrs este error, si ejecutas java HelloWorldApp.class en lugar de java
HelloWorldApp. Recuerda que el argumento es el nombre de la clase que quieres usar, no el nombre del
fichero.
Exception in thread main java.lang.NoSuchMethodError: main
La JVM requiere que tu clase se ejecute con el mtodo main() que es el que inicia la ejecucin de tu aplicacin.

Applet o las aplicaciones de Java Web Start estn bloqueadas.


Si ests ejecutando una aplicacin a travs del navegador y obtienes advertencias de seguridad que dicen que la
aplicacin est bloqueada, examina los siguientes puntos:
Verifica que los atributos en el manifiesto del fichero jar tienen los valores correctamente asignados.
En un pryecto de NetBeans, puedes abrir este manifiesto en la pestaa Files y haciendo doble click en
manifest.mf.
Si estas ejecutando el applet en modo local en un webserver que usas para comprobar el cdigo, la
barra deslizante de seguridad de Java en el panel de control debe ser puesto a Medium para poder
trabajar con los applets locales, sin embargo esto no se recomienda por razones de seguridad.

2.0 Aprendiendo el lenguaje Java


Este trail cubre los fundamentos de programacin del lenguaje Java.

2.1 Conceptos sobre programacin orientada a objetos.


Te ensea los conceptos del core adems de la programacin orientada a objetos: objetos, mensajes, clases,
herencia. Esta leccin finaliza mostrando como estos conceptos se traducen en cdigo. Puedes saltarte esta
leccin si ya estas familiarizado con la programacin orientada a objetos.

2.2 Bases del lenguaje


Describe las caractersticas tradicionales del lenguaje, incluyendo variables, arrays, tipos de datos, operadores
y control de flujo.

2.3 Clases y objetos


Describe como escribir las clases de donde se crean los objetos, y como crear y usar esos objetos.

2.4 Interfaces y herencia


Describe las interfaces, que son, porque vas a estar interesado en escribir una, como crear una. Esta seccin
tambin te muestra la manera en la que puedes derivar una clase de otra. En definitiva, como una subclase
puede heredar campos y mtodos de una superclase. Aprenders que todas las clases derivan de la clase Object,
y como modificar los mtodos que una subclase hereda de la superclase.

2.5 Nmeros y cadenas


Esta leccin describe cmo usar Number y String. Tambin se muestra como formatear los datos.

2.6 Genricos
Es una poderosa caracterstica de Java. Mejoran la seguridad de tu cdigo, hace que los bugs en tu cdigo sean
detectables en tiempo de compilacin.

2.7 Paquetes
Otra caracterstica de Java que ayuda a organizar y estructurar tus clases y la relacin entre ellas.

2.1 Concepto de la programacin orientada a objetos


Si nunca has programado un lenguaje orientado a objetos antes, necesitars saber unos conceptos bsicos antes
de escribir cualquier cdigo. Esta leccin te introducir a los objetos, clases, herencias, interfaces y paquetes.
Cada discusin se centra en cmo estos conceptos se relacionan en el mundo real, y cmo se escribe en el
lenguaje Java.

2.1.1 Qu es un objeto?
Un objeto est hecho con software, lneas de cdigo. Este objeto tiene un estado y un comportamiento. Los
objetos se relacionan con la vida real, cosas cotidianas. Esta leccin explica cmo se representa el estado y el
comportamiento en un objeto, te presenta el concepto de encapsulacin de datos y te explica los beneficios del
diseo de tu software aplicando esta tcnica.

2.1.2 Qu es una clase?


Una clase es un proyecto o prototipo de los objetos que se crean. Esta seccin define una clase que modela el
estado y el comportamiento de un objeto en el mundo real. Intencionadamente se centra en lo bsico,
mostrndote cmo una nica clase puede tener un modelo de estado y comportamiento.

2.1.3 Qu es la herencia?
La herencia te provee de un poderoso mecanismo natural para organizar y estructurar tu software. Esta seccin
explica como las clases heredan un estado y un comportamiento a partir de sus superclases, y explica como
derivar una clase de otra usando una simple sintaxis que Java provee.

2.1.4 Qu es una interfaz?


Una interfaz es un contrato entre una clase y el mundo exterior. Cuando una clase implementa una interfaz, le
hace prometer que proveer el comportamiento publicado en la interface y explica los cambios necesarios para
que cualquier clase que la implemente.

2.1.5 Qu es un paquete?
Un paquete es el nombre de un directorio para organizar tus clases y las interfaces de una manera lgica. Al
poner tu cdigo en paquetes, ests haciendo los software de gran tamao sean ms fciles de manejar. Esta
seccin explica su utilidad, y te presenta las interfaces de programacin de las aplicaciones (APIs) que tiene la
plataforma Java.

2.1.6 Preguntas y ejercicios: Conceptos de la programacin orientada a


objetos.
Usa las preguntas y los ejercicios presentados en esta seccin para probar que entendiste que son objetos,
clases, herencias, interfaces y paquetes.

2.1.1 Qu es un objeto?
Los objetos son clave para entender la tecnologa de la programacin orientada a objetos. Si miras a tu
alrededor ahora, encontrars muchos ejemplos de objetos en la vida real, tu perro, tu escritorio, tu televisin, tu
bicicleta.
En la vida real, los objetos comparten dos caractersticas: todos tienen un estado y un comportamiento. Los
perros tienen estado (nombre, color, pelo, hambre) y comportamiento (ladra, juega, mueve el rabo). Las
bicicletas tambin tienen estados (la marcha actual, el pedal que empuja, la velocidad) y comportamiento
(cambio de marchas, cambio del pedal que empuja, frenar). Identificando los estados y comportamientos de los
objetos en el mundo real es una fantstica manera de empezar en trminos de programacin orientada a objetos.
Toma un minuto ahora para observar los objetos del mundo real que te rodean. Por cada objeto que veas,
pregntate dos cosas Que estados puede tener? y Qu cosas pueden hacer? Asegrate de apuntar en tus
observaciones. Como ya sabes, te dars cuenta de que hay muchos objetos de variedada complejidad, la
lmpara de tu escritorio solo puede tener dos estados (encendido y apagado) pero la radio tiene alguno mas
(volumen, la emisora) y mas comportamientos (subir y bajar el volumen, buscar emisora). Puedes darte cuenta
de que algunos objetos contienen otros objetos. Estas observaciones en el mundo real se traducen al mundo de
la programacin orientada a objetos.

Los objetos en el software son similares de igual manera, tambin consisten en un estado y un comportamiento
relacionado. Los objetos guardan en campos sus estados (variables en algunos lenguaje de programacin) y
exponen su comportamiento a travs de mtodos (funciones en algunos lenguaje de programacin).
Los mtodos operan en el estado interno del objeto y sirven como mecanismo primario de comunicacin para
que un objeto se comunique con otro. En un estado interno, oculto, encuentran los estados del objeto,
nicamente accesible desde los mtodos, a esto se le denomina encapsulacin, otro principio fundamental del
programacin orientada a objetos.
Imagnate una bicicleta, por ejemplo:

Los estados atribuibles (velocidad actual, cadencia del pedaleo y marcha actual) y los mtodos que provee para
cambiar ese estado, hacen que los objetos del mundo exterior puedan usarlo. Por ejemplo, si la bicicleta tiene
solo seis marchas, el mtodo que cambia las marchas podra rechazar cualquier valor fuera de la escala (1 a 6)
por peticin de otro objeto.
Agrupar el cdigo dentro de los objetos (hablamos del software) te otorga de ciertos beneficios incluyendo:
Modularidad. El cdigo fuente del objeto puede ser escrito y mantenido independientemente del
cdigo fuente de otros objetos. Una vez creado, un objeto puede ser fcilmente pasado al sistema.
Informacin privada. Al interactuar solo con los mtodos de los objetos, los detalles internos de su
implementacin quedan ocultos al mundo exterior.
Cdigo reusable. Si un objeto ya existe (quizs escrito por otro desarrollador de software), puedes
usarlo en tu programa. Esto te permite ahorrar tiempo ya que la implementacin, evaluacin, y tareas
de debug ya fueron realizadas por el otro programador y puedes confiar en su cdigo.
Mayor adaptacin al acople y depuracin. Si un objeto en particular se vuelve problemtico, puedes
quitarlo fcilmente de tu aplicacin y colocar en su lugar otro que los sustituya. Este arreglo es anlogo
en la vida real. Si se rompe un freno, reemplazas el freno, no el coche entero.

2.1.2

Qu es una clase?

En el mundo real, a menudo encuentras muchos objetos individuales, todos ellos de la misma clase. Pueden
haber miles de bicicletas, todas del mismo modelo. Cada bicicleta construida usando el mismo proyecto y los
mismos componentes. En trminos de programacin orientada a objetos, decimos que tu bicicleta es una
instancia de una clase llamada bicicleta. Una clase es el prototipo del cual se crean objetos.
Esta clase bicicleta podra ser una posible implementacin de una bicicleta:
class Bicycle {
int cadence = 0;
int speed = 0;
int gear = 1;
void changeCadence(int newValue) {

cadence = newValue;
}
void changeGear(int newValue) {
gear = newValue;
}
void speedUp(int increment) {
speed = speed + increment;
}
void applyBrakes(int decrement) {
speed = speed - decrement;
}

void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}

La sintaxis de la programacin Java puede ser nueva para ti, pero el diseo de la clase est basada en una
discusin anterior cuando hablbamos de los mtodos de las bicicletas. Los campos, cadencia, velocidad,
marcha, representan el estado de la bicicleta. Los mtodos actan sobre el estado de la bicicleta. Podemos
cambiar la cadencia, cambiar de marcha, acelerar, frenar y el ltimo mtodo sirve para mostrar en la consola el
estado del objeto bicicleta.
Te has podido fijar que la clase Bicycle no tiene mtodo main(). Esto se debe a que la aplicacin no est
completa. Esto es solo el prototipo que otra aplicacin puede usar para crear una bicicleta.
Este cdigo llamado BicycleDemo, crea dos bicicletas a partir de la clase Bicycle para luego invocar sus
mtodos:
class BicycleDemo {
public static void main(String[] args) {
// Create two different
// Bicycle objects
Bicycle bike1 = new Bicycle();
Bicycle bike2 = new Bicycle();
// Invoke methods on
// those objects
bike1.changeCadence(50);
bike1.speedUp(10);
bike1.changeGear(2);
bike1.printStates();
bike2.changeCadence(50);
bike2.speedUp(10);
bike2.changeGear(2);
bike2.changeCadence(40);
bike2.speedUp(10);

bike2.changeGear(3);

bike2.printStates();
En la consola imprimir la cadencia de pedaleo, la velocidad y la marcha de las dos bicicletas:
cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3

2.1.3 Qu es la herencia?
Diferentes clases de objetos tienen a menudo cosas en comn. Mountain bikes, road bikes, tndem bikes,
todos estos son por ejemplo, comparten las caractersticas de las bicicletas (velocidad actual, cadencia de
pedaleo, marcha actual). Pero tambin tienen unas caractersticas adicionales que las hacen un tanto distintas, la
bicicleta tndem tiene dos asientos, la road bike tiene manillares caidos, algunas mountain bikes tienen una
cadena adicional para ganar ms empuje en el giro.
En la programacin orientada a objetos se permite que las clases hereden las caractersticas comunes de otros
objetos, y tambin su comportamiento. En este ejemplo, Bicycle ahora se convierte en la superclase de
MountainBike, RoadBike y TandemBike. En el lenguaje Java, cada clase puede heredar una superclase y cada
superclase puede ser heredada sin limitacin:

La sintaxis para crear una subclase es simple. Al comienzo de la declaracin de la clase, se usa la palabra clave
extends seguida de la clase que quiere heredar.
class MountainBike extends Bicycle {
// new fields and methods defining
// a mountain bike would go here
}

Esto le da a MountainBike todos los campos y mtodos que tiene Bicycle, pero su cdigo puede ser
desarrollado de manera nica. Tienes que tener cuidado con el comportamiento y el estado que cada superclase
define, ya que el cdigo no aparecer en la subclase.

2.1.4 Qu es una interfaz?


Como ya has visto, los objetos definen sus interacciones con el mundo exterior a travs de los mtodos que
exponen.
Una interfaz en el mundo real podra ser los botones del televisor. Estos se encuentran entre los componentes
elctricos y la carcasa del televisor. Presionas el botn de apagado y la tele se apaga.
En la forma ms comn, una interfaz es un grupo de mtodos con el cuerpo del cdigo vaco. El
comportamiento de una bicicleta, si lo especificamos en una interfaz sera asi:
interface Bicycle {
// wheel revolutions per minute
void changeCadence(int newValue);
void changeGear(int newValue);
void speedUp(int increment);
}

void applyBrakes(int decrement);

Al implementar esta interfaz, el nombre de tu clase debera cambiarse (a uno mas particular, como
ACMEBicycle) y usars la palabra clave implements en la declaracin de la clase, seguida del nombre de la
interfaz.
class ACMEBicycle implements Bicycle {
// remainder of this class
// implemented as before
}

Al implementar una interfaz haces que tu clase sea ms formal en cuanto al comportamiento que promete
proveer. Las interfaces son un contrato entre la clase y el mundo exterior, y este contrato se tiene que cumplir
en tiempo de compilacin. Si tu clase implementa una interfaz, todos los mtodos definidos en la interfaz deben
aparecer en el cdigo de la clase antes de que la clase compile.
Nota: Para que compile esta clase ACMEBicycle, necesitaras aadir la palabra clave public al comienzo de
los mtodos de la interface. Aprenders las razones ms adelante.

2.1.5 Qu es un paquete?
Un paquete es un directorio que organiza una serie de clases e interfaces que tienen que ver entre si.

Conceptualmente puedes pensar que se trata de las carpetas de tu ordenador. Ya que el software escrito en Java
puede estar compuesto de cientos o miles de clases, tiene sentido querer pensar en cmo organizar tu proyecto.
La plataforma de Java provee de enormes libreras de clases (ordenados en paquetes) disponibles para tus
propias aplicaciones. Estas libreras se las conocen como APIs (Application Programming Interface). Sus
paquetes representan la mayora de las tareas asociadas con el propsito general de la programacin. Por
ejemplo, el objeto String contiene estado y comportamiento para los caracteres de cadena, un objeto File
permite a un programador crear, inspeccionar, modificar o borrar fcilmente un fichero, un objeto Socket te
permite crear y usar redes, varios GUI como los botones, cajas de texto y dems estn relacionados con la
interfaz grfica del usuario. Literalmente existen miles de clase para elegir. Esto te permite como programador,
enfocarte en el diseo de la aplicacin, en lugar de crear la infraestructura para que el software realice el
trabajo.
Las especificaciones de las API en Java contienen una lista completa de los paquetes, interfaces, clases, campos
y mtodos que Java SE provee. Carga la pgina en tu navegador y ponga como favorito. Como programador, se
convertir en una de las herramientas mas usadas como documentacin y referencia.

2.1.6

Preguntas y ejercicios

Preguntas
1.
2.
3.
4.
5.
6.
7.
8.
9.

En el mundo real los objetos contienen _____ y _____.


El estado de un objeto se guarda en _____.
El comportamiento de un objeto se expone a travs de _____.
Esconder los datos del mundo exterior y hacerlos accesibles solo por medio de mtodos es una tcnica
que se conoce como _____.
Al proyecto de un objeto se le conoce como _____.
Los comportamientos comunes deberan ser definidos en una _____ y heredarse en una _____ usando
la palabra clave _____.
Una coleccin de mtodos sin cdigo (es decir, sin implementacin) e le conoce como ______.
Un directorio que organiza las clases y las interfaces por su funcionalidad se la conoce como _____.
El termino API significa ______.

Ejercicios
1. Crea una clase para cada objeto que viste en este mdulo del mundo real. Repasa la clase Bicycle si
olvidaste la sintaxis.
2. Para cada clase que creasate, crea una interfaz que defina su comportamiento, luego haz otra clase que
la implemente. Omite uno o dos mtodos e intenta compilar. Que ocurre?

Respuestas a las preguntas.


1.
2.
3.
4.
5.

Estado y comportamiento.
Campos.
Mtodos.
Encapsulacin.
Clase

6.
7.
8.
9.

Superclase, subclase, extends.


Interface.
Package.
Application Programming Interface, o, interfaz de programacin de la aplicacin.

Respuesta a los ejercicios.


1. La respuesta variar dependiendo de los objetos. Puedes postearlas en el blog.
2. La respuesta variar segn los mtodos no implementados, pero el error es la omisin de mtodos que
la interface te obliga a crear.

2.2

Bases del lenguaje

2.2.1

Variables

Ya has aprendido que los objetos guardan sus estados en los campos. Sin embargo, en el lenguaje de
programacin Java tambin usa el trmino variables. En esta seccin se discute esta relacin, adems de la
convencin para nombrar las variables, tipos de datos bsicos (primitivos, carcter, cadenas y arrays), variables
por defecto y literales.

2.2.2 Operadores
Esta seccin describe los operadores en Java. Presenta los ms comunes primeros, y los menos habituales al
final. Cada discusin incluye ejemplos de cdigo que puede compilarse y ejecutarse.

2.2.3 Expresiones, estamentos y bloques


Los operadores pueden ser usados en expresiones de construccin, los cuales computan valores, las expresiones
son el centro de los componentes de los estamentos, los estamentos pueden ser agrupados en bloques. Esta
seccin discute las expresiones, estamentos y bloques usando cdigo como ejemplo que ya has visto.

2.2.4 Estamentos de control de flujo


Esta seccin describe los estamentos de control de flujo soportados por Java. Cubre los bucles, los
condicionales, y estamentos de ramificacin que permite a los programas ejecutar partes del cdigo de un
bloque.

2.2.1 Variables
Como ya has deberas de saber, un objeto guarda su estado en campos.
int cadence = 0;
int speed = 0;
int gear = 1;

En el tema de Qu es un objeto introducimos el trmino de los campos. Pero quizs todava te queden
algunas preguntas como:
Cules son las reglas y convenciones para nombrar a los campos?

Adems de int, que otros tipos de datos existen?


Tienen que ser inicializados los campos cuando se declaran?
Tienen un valor por defecto cuando no se les da ningn valor?
Veremos todo esto en esta leccin, pero antes, hay unas distinciones tcnicas que tienes que saber. En Java, se
utilizan los trminos campos y variables, por lo que es fuente de confusin entre desarrolladores, ya que parece
referirse a la misma cosa.
El lenguaje de programacin Java define las siguientes clases de variables:
Variables de instancia (no son campos estticos). Tcnicamente hablando, los objetos guardan sus
estados en campos no estticos, que son campos declarados sin la palabra clave static. Los campos no
estticos son tambin conocidos como variables de instancia porque su valor nicamente est pensado
para funcionar con la instancia de una clase (de un objeto).
Variables de clase (son campos estticos). Una variable de clase es cualquier campo declarado con el
modificador static, esto le dice al compilador que hay slo una copia de esta variable, sin importar
cuantas veces haya sido instanciada la clase. Un campo que defina el nmero de marchas para una
clase de bicicleta podra ser marcada como esttica ya que el nmero de marchas sera el mismo para
todas las instancias de esa bicicleta. El cdigo static int numGears = 6; debera de crearse en un campo
esttico. Adems podramos usar la palabra clave final para garantizar que el nmero de marchas no
puede ser alterado.
Variables locales. La sintaxis es la misma que en los campos, pero se usan en los mtodos para
guardar su estado temporalmente. No hay palabras clave especiales para las variables locales. Este tipo
de variable slo son visibles en el mtodo donde se crean y no son accesibles para el resto de la clase.
Parmetros. Ya has visto ejemplos de parmetros. En el mtodo main(String [] args) la variable args
es un parmetro. El dato importante es que los parmetros no se clasifican como campos, sino como
variables. Esto se aplica a los constructores tambin o a manejadores de excepciones. Los veremos ms
adelante.
Habiendo dicho esto, tengo que decir que el resto del tutorial usa estas directrices cuando se habla sobre campo
y variables. Si hablamos sobre campos en general (se excluyen las variables locales y parmetros), nosotros
diremos campos. Si se habla de variables, incluir todo lo expuesto arriba. Si el contexto necesita hacer
distinciones, usaremos los trminos especficos (campo esttico, variable local, etc). Ocasionalmente puedes
encontrar el trmino miembro. El tipo de los campos, mtodos y tipos anidados en su conjunto se les
denomina miembros.

Nomenclaturas
Cada lenguaje de programacin tiene su propia serie de reglas y convenciones para las clases de nombres que
se est permitido usar, y Java no es diferente. Las reglas y las convenciones para la nomenclatura se resume de
esta manera:
Los nombres de las variables son sensibles a las maysculas y minsculas. Puede usar cualquier
identificador legal, longitud cualquiera de caracteres Unicode y dgitos, comenzando el nombre por
una letra, el smbolo $ o el guion bajo _. Sin embargo por convencin se comienza por una letra, y el
smbolo dlar no se usa. Puede que en alguna situacin donde los nombres se generen de forma
automtica, los encuentres, pero se debera evitar siempre su uso, lo mismo que para el guion bajo. No

se permite el espacio en blanco.


Los siguientes caracteres pueden ser letras, nmeros, el signo dlar o el guion bajo. Las mismas reglas
de la convencin se aplican aqu tambin. Cuando elegimos nombres de variables, debemos usar
palabras completas en lugar de criptogramas. Haciendo esto, haces el cdigo ms fcil de leer y
entender. En muchos casos tambin hace que tu cdigo se documente as mismo, los campos como
cadena, velocidad y marcha por ejemplo, son muchos ms intuitivos que las versiones abreviadas.
Tampoco puedes usar las palabras reservadas del lenguaje.
Si el nombre que eliges consiste en una palabra, debe estar escrita en minscula. Si son varias, la
primera letra despus de cada palabra debe ir en maysculas: cambioMarcha, velocidadActual. Sin
embargo, si se trata de una constante, todas se escriben en maysculas y se separa cada palabra con un
guion: static final int NUMERO_MARCHAS = 6; El carcter del guion bajo no se usa en ningn otro
caso.

2.2.2 Operadores
Ahora que has aprendido como declarar e inicializar variables, seguramente quieras saber cmo hacer algo con
ellas. Los operadores son smbolos que ejecutan operaciones especficas sobre uno, dos o tres operandos y
luego devuelve un resultado.
Los operadores de la siguiente tabla estn ordenados de mayor a menor preferencia. Esto significa que los
operadores por encima de la tabla sern ejecutados antes que los que quedan por debajo. Cuando hay
operadores con la misma preferencia en una misma expresin, una regla debe gobernar para saber cul se
evala primero. Todas las operaciones binarias excepto las de asignacin son evaluadas de izquierda a derecha,
los operadores de asignacin se evalan de derecha a izquierda.

Operadores

Preferencia

Prefijo
Unitario
Multiplicativo
Aditivo
Corrimiento
Relacional
Igualdad
Bitwise AND
Bitwise exclusive OR
Bitwise inclusive OR
Lgico AND
Lgico OR
Ternario
Asignacin

Var++ var
++var var +var var ~ !
/%*
+<< >> >>>
< > <= >= instanceof
== !=
&
^
|
&&
||
?:
= += -= /= %= &= ^= |= <<= >>= >>>=

En trminos generales de programacin, ciertos operadores tienden a aparecer ms que otros, por ejemplo, el
operador de asignacin = es ms comn que el operador de corrimiento hacia la derecha >>>. Con esto en
cuenta, la siguiente discusin se centra primero en los operadores que ms vamos a usar, y terminaremos con
los ms raros. Cada discusin se acompaa por un ejemplo de cdigo que puedes compilar y ejecutar. Al

estudiar los resultados te ayudar a memorizar lo que has aprendido.

2.2.3 Expresiones, estamentos y bloques


Ahora que entiendes que son las variables y los operadores, es hora de aprender acerca de las expresiones,
estamentos y bloques. Los operadores pueden ser usados para construir expresiones, las cuales computan
valores. Las expresiones son el ncleo de los estamentos, los estamentos pueden ser agrupados en bloques.

Expresiones
Una expresin es un constructor hecho con variables, operadores e invocaciones a mtodos, que son
construidos de acuerdo a la sintaxis del lenguaje, y evalan un solo valor. Ya has visto ejemplos de expresiones
como estas:
System.out.println(i++);int cadence = 0;
anArray[0] = 100;
System.out.println("Element 1 at index 0: " + anArray[0]);
int result = 1 + 2; // result is now 3
if (value1 == value2)
System.out.println("value1 == value2");

El tipo de dato devuelto por una expresin depende de los elementos usados en la expresin- La expresin
cadence=0 devuelve un int porque el operador de asignacin devuelve un valor del mismo tipo que su operando
de la izquierda. En este caso, cadence es un int. Tal como puedes ver en otras expresiones, la expresin
devuelve otros tipos de valor tambin, como boolean o String.
El lenguaje de programacin Java te permite construir compendios de expresiones de varios tamaos, desde las
ms pequeas hasta las ms grandes que el tipo de dato requiere para que la expresin encaje con el tipo de
dato del otro. Aqu, una expresin de un compendio de expresiones:
1 * 2 * 3
En este ejemplo en particular, el orden en el que las expresiones se evalan no tiene importancia porque el
resultado de la multiplicacin es independiente del orden, la salida es siempre la misma. Sin embargo, esto no
se cumple en todas las expresiones. Por ejemplo, la siguiente expresin te da una resultado distinto
dependiendo de si ejecutas la resta o la divisin primero:
x + y / 100

// ambiguous

Puedes especificar exactamente como ser evaluada una expresin usando parntesis (). Por ejemplo, para
hacer esta expresin inambigua, podras escribir:
(x + y) / 100

// unambiguous, recommended

Si no indicas explcitamente el orden en que se ejecutan los operandos, el orden se determina por el orden de
precedencia. Los operadores tienen un nivel de precedencia ms alto y sern evaluados primero. Por ejemplo, la

divisin tiene una preferencia ms alta que la suma. Sabiendo esto, podemos decir que estos estamentos darn
el mismo resultado:
x + y / 100
x + (y / 100) // unambiguous, recommended

Cuando se escribe una expresin de compendios, se explicito e indica con parntesis que operadores debera
evaluarse primero. Esta prctica hace el cdigo ms fcil de mantener.

Estamentos
Los estamentos equivalen a las frases en un lenguaje natural. Un estamento forma una unidad de ejecucin. Los
siguientes tipos de expresiones pueden ser creadas dentro de un estamento sealando con un punto y coma el
final de la expresin.

Expresiones de asignacin
Cualquier uso de ++ o
Invocaciones a mtodos
Objetos creando expresiones

Tales estamentos se les conocen como estamentos de expresin. Aqu hay algunos ejemplos de estamentos de
expresin:
// assignment statement
aValue = 8933.234;
// increment statement
aValue++;
// method invocation statement
System.out.println("Hello World!");
// object creation statement
Bicycle myBike = new Bicycle();
Adems de los estamentos de expresin, hay otras clases de estamentos, los estamentos de declaracin y los de
control de flujo. Un estamento de declarion declara variables. Has visto muchos ya:
// declaration statement
double aValue = 8933.234;

Finalmente, el estamento de control de flujo regula el orden en el que los estamentos son ejecutados.
Aprenders mas sobre control de flujo en las siguientes secciones.

Bloques
Un bloque es un grupo de cero o ms estamentos encerrados entre llaves y pueden ser usados en cualquier parte
donde un estamento est permitido. El siguiente ejemplo, ilustra el uso de bloques:
class BlockDemo {
public static void main(String[] args) {
boolean condition = true;
if (condition) { // begin block 1

System.out.println("Condition is true.");
} // end block one
else { // begin block 2
System.out.println("Condition is false.");
} // end block 2
}

2.2.4 Control de flujo


Los estamentos dentro de tu ficheros fuentes se ejecutan normalmente desde arriba hacia abajo, en el orden en
que aparecen. Con el control de flujo, esto puede cambiarse, se puede interrumpir la ejecucin empleando
decisiones, bucles y llaves, haciendo que tu programa ejecute unos bloques en particular de manera
condicional. En esta seccin se describe los estamentos de decisin:
If then
If then else
Switch
Los estamentos de bucle:
For
While
Do while
Y los estamentos de llaves:
Break
Continue
Return
Soportados por el lenguaje de programacin Java.

2.3 Clases y objetos


Con el conocimiento que tienes ahora de las bases de programacin Java, puedes aprender a escribir tus propias
clases. En esta leccin, encontrars informacin sobre como defininir tus propias clases, incluyendo
declaraciones de variables, mtodos y constructores.
Aprenders como usar tus clases para crear objetos, y como usar el objeto creado.
Esta leccin tambin cubre las clases anidadas y las enumeraciones.

2.3.1 Clases
Esta seccin te muestra la anatoma de una clase, como declarar campos, mtodos y constructores.

2.3.2 Objetos
Esta seccin cubre la creacin y el uso de objetos. Aprenderas como instanciar un objeto, y una vez instanciado,
como usar el operador punto . para acceder a las variables y mtodos de la instancia del objeto.

2.3.4 Ms sobre clases


Esta seccin cubre mas aspectos de las clases que dependen de usar las referencias del objeto y el operador
punto que has aprendido en la seccin anterior: el retorno de valores desde los mtodos, la palabra clave this,
clases y miembros de instancias, y control de acceso.

2.3.5 Tipos de enumeracin


Esta seccin cubre las enumeraciones, clases especializadas que te permiten definir tu grupo de constantes.

2.3.1 Clases
En la introduccin de la leccin titulada Conceptos de la programacin orientada a objetos, usaba la clase
Bicycle como ejemplo, con bicicletas de carrera, bicicletas de montaa, y bicicletas tndem como sus
subclases. Aqu hay un ejemplo de un cdigo para una posible implementancin de una clase Bicycle, para
darte un ejemplo de la declaracin de la clase. Las siguientes secciones de esta leccin explicarn la
declaracin de la clase paso a paso. Por ahora estos detalles no nos conciernen.
public class Bicycle {
// the Bicycle class has
// three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has
// one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;

}
// the Bicycle class has
// four methods
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}

Una clase que se declara MountainBike es una sublclase de Bicyle y podr ser como esta:
public class MountainBike extends Bicycle {
// the MountainBike subclass has
// one field
public int seatHeight;
// the MountainBike subclass has
// one constructor
public MountainBike(int startHeight, int startCadence,
int startSpeed, int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}

// the MountainBike subclass has


// one method
public void setHeight(int newValue) {
seatHeight = newValue;
}

MountainBike hereda todos los campos y mtodos de Bicycle, adems aade los campos setHeight y un
mtodo para seleccionarlo (las bicicletas de montaa tienen asientos que pueden desplazarse arriba y abajo
segn demanda del terreno).

2.3.2 Objetos
Un programa tpico de Java crea muchos objetos, los cuales como ya sabes, interactan al invocar sus mtodos.
A travs de la interaccin de estos objetos, un programa puede llevar a cabo varias tareas, tales como
implementar una GUI, una animacin, o enviar y recibir informacin de internet. Una vez que el objeto ha

completado el trabajo para el cual ha sido creado, sus recursos se reciclar para ser usado por otros objetos.
Este pequeo programa crea tres objetos, un Point y dos Rectangle. Necesitaras los cdigos fuentes de estos
tres objetos para compilar este programa:

public class CreateObjectDemo {


public static void main(String[] args) {
// Declare and create a point object and two rectangle objects.
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
// display rectOnes width, height, and area
System.out.println(Width of rectOne: + rectOne.width);
System.out.println(Height of rectOne: + rectOne.height);
System.out.println(Area of rectOne: + rectOne.getArea());
// set rectTwos position
rectTwo.origin = originOne;
// display rectTwos position
System.out.println(X Position of rectTwo: + rectTwo.origin.x);
System.out.println(Y Position of rectTwo: + rectTwo.origin.y);
// move rectTwo and display its new position
rectTwo.move(40, 72);
System.out.println(X Position of rectTwo: + rectTwo.origin.x);
System.out.println(Y Position of rectTwo: + rectTwo.origin.y);
}

Este programa crea, manipula y muestra informacin de varios objetos. Aqu est la salida:
Width of rectOne: 100
Height of rectOne: 200
Area of rectOne: 20000
X Position of rectTwo: 23
Y Position of rectTwo: 94
X Position of rectTwo: 40
Y Position of rectTwo: 72
Las siguientes secciones usan el ejemplo de arriba para describir el ciclo de la vida de un objeto dentro de un
programa. A partir de ellos, aprenders como escribir cdigo que crea y usa objetos en tus programas. Tambin

aprenders como el sistema elimina un objeto cuando su vida ha finalizado.

2.3.3 Mas sobre clases


Esta seccin cubre mas aspectos de las clases que dependen de como se usan las referencias de los objetos y el
operador punto que has aprendido en la pasada seccin:

Devolucin de valores de los mtodos.


La palabra clave this.
Clases vs miembros de instancia.
Control de acceso.

2.3.4 Clases anidadas


En el lenguaje de programacin Java se te permite definir una clase dentro de otra. Tales clases se las conoce
como clases anidadas:
class OuterClass {
...
class NestedClass {
...
}
}
Terminologa: Las clases anidadas se dividen en dos categoras, las estticas y las no estticas. Las clases
anidadas estticas se las llama igual, clases anidadas estticas, pero a las clases no estaticas, se las llama clases
internas.
class OuterClass {
...
static class StaticNestedClass {
...
}
class InnerClass {
...
}
}

Una clase anidada es un miembro de su clase. Las clases anidadas nio estticas tienen acceso a otros miembros
de la clase donde est anidada, incluso las privadas. Como miembro de clase, puede ser declarada private,
public protected o por defecto, sin modificador. Las que invoquen clases exteriores solo pueden ser declaradas
public o sin modificador.

Por qu usar clases anidadas?


El compendio de razones para usar clases anidadas puede incluir lo siguiente:
Es una manera de agrupar las clases que solo son usadas en un sitio. Si una clase es til nicamente
para otra clase, entonces es lgico que la clase se encuentre embebida en esa clase. Anidar tales clases
hacen tu paquete mas racional.
Incremementa la encapsulacin, considera dos clases de alto nivel, A y B, donde B necesita acceso a

miembros de A que podra ser declarado provate. Al esconder la clase B dentro de A, los miembros de
A pueden ser declarados private y B puede tener acceso. Ademas, B puede estar oculta a las dems
clases.
Puede hacer el cdigo mas legible y hacer mas fcil el mantenimiento del cdigo. Anidar las pequeas
clases con clases de alto nivel ponen el cdigo mas cerca de donde se usan.

Clases anidadas estticas


Como ocurre con los mtodos y variables, las clases anidadas se asocian con su clase externa. Y como es
esttica, no puede refererirse directamente a una variable de instancia o mtodo dentro de la clase donde se ha
anidado. Solo puede ser usada por un objeto de referencia.
Nota: Una clase esttica interactua con los miembros de instancia de su clase exterior (y otras clases) al igual
que las clases de alto nivel. En efecto, una clase esttica se comporta como una clase de alto nivel que ha sido
anidado en otra clase de alto nivel por conveniencia de paquete.

Clases internas
Al igual que los mtodos y variables de instancia, una clase interna se asocia con una instancia de su clase
superior (la clase donde se anida) y tiene acceso directo a los mtodos y campos del objeto. Tambien, ya se
convierte en una clase interna asociada con una instancia, no puede ser definida con cualquier miembro
esttico.
Los objetos que estn instanciados en una clase interna existen dentro de la clase externa:
class OuterClass {
...
class InnerClass {
...
}
}

Una instancia de la clase interna solo puede existir dentro de la clase externa y no tiene acceso directo a los
mtodos y campos de la clase donde se ha creado.
Para instanciar una clase interna, primero debes instanciar la clase externa. Luego, crear el objeto interno con el
objeto externo de esta manera:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

Hay dos clases especiales de clases internas, las clases locales y las clases annimas.
Haciendo sombra
Si una declaracin de un tipo (como una variable o el nombre de un parmetro) que tiene un tiempo limitado de
vida (como una clase interna o una definicin de un mtodo) tiene el mismo nombre que otra declaracin en el
mismo ciclo de vida, entonces la declaracin hace sombra a la declaracin de ese ciclo de vida. No puedes
referirte a una declaracin sombreada solo por su nombre. El siguiente ejemplo lo muestra:
public class ShadowTest {

public int x = 0;
class FirstLevel {
public int x = 1;
void methodInFirstLevel(int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
}

public static void main(String... args) {


ShadowTest st = new ShadowTest();
ShadowTest.FirstLevel fl = st.new FirstLevel();
fl.methodInFirstLevel(23);
}

La salida del ejemplo:

x = 23
this.x = 1
ShadowTest.this.x = 0
Este ejemplo define tres variables llamadas x, el miembro de la variable de la clase ShadowTest, el miembro de
la variable de la clase interna FirstLevel, y el parametro en el mtodo methodFirstLevel. La variable x definida
como parmetro del mtodo methodInFirstLevel sombrea la variable de la clase interna FirstLevel.
Consecuentemente, cuando usas la variable x en el mtodo methodInFirstLevel, se refiere al parmetro del
mtodo. Para referirse a la variable de la clase interna FirstLevel, se usa this:
System.out.println("this.x = " + this.x);
El siguiente estamento accede a la variable miembro de la clase SahdowTest desde el mtodo
methodInFirstLevel:
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);

Vous aimerez peut-être aussi