netbeans_java.odt

41
1.0 Comenzando Este trail provee de todo lo que necesitarás saber para empezar a programar con Java. 1.1 El fenómeno de la tecnología Java. Provee de un acercamiento a la tecnología Java. Se discute la programación y la plataforma. También una breve visión de lo que es la tecnología y lo que puede hacer tu vida mas sencilla. 1.2 La aplicación “Hola mundo!”. Este tema trata de acercarte a lo que tienes que descargar, que tienes que instalar y que escribir para crear una aplicación. Provee de información por separado para NetBeans, Microsoft Windows, Solaris, Linux y Mac. 1.3 Un mirada mas profunda a “Hola mundo!”. Se describe cada sección del código en detalle. Cubre los comentarios del código fuente y el método main. 1.4 y 1.5 Ejercicios de compresión y ejercicios resueltos. Una vez que hayas acabado el capitulo, podrás verificar que has asimilado los conceptos. 1.6 Problemas mas comunes y las soluciones. En este lugar vas a encontrar las soluciones a la compilación o a la ejecución de programas.

Upload: jose-manuel-rivera-claure

Post on 09-Apr-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NETBEANS_JAVA.odt

1.0 Comenzando

Este trail provee de todo lo que necesitarás saber para empezar a programar con Java.

1.1 El fenómeno de la tecnología Java.Provee de un acercamiento a la tecnología Java. Se discute la programación y la plataforma. También una brevevisión de lo que es la tecnología y lo que puede hacer tu vida mas sencilla.

1.2 La aplicación “Hola mundo!”.Este tema trata de acercarte a lo que tienes que descargar, que tienes que instalar y que escribir para crear unaaplicación. Provee de información por separado para NetBeans, Microsoft Windows, Solaris, Linux y Mac.

1.3 Un mirada mas profunda a “Hola mundo!”.Se describe cada sección del código en detalle. Cubre los comentarios del código fuente y el método main.

1.4 y 1.5 Ejercicios de compresión y ejercicios resueltos.Una vez que hayas acabado el capitulo, podrás verificar que has asimilado los conceptos.

1.6 Problemas mas comunes y las soluciones.En este lugar vas a encontrar las soluciones a la compilación o a la ejecución de programas.

Page 2: NETBEANS_JAVA.odt

El fenómeno de la tecnología Java.

Hablemos sobre que es la tecnología Java, parece estar en todas partes pero que es? La siguiente sección explica como es el lenguaje de programación y la plataforma, y muestra un acercamiento a lo que esta tecnología puede hacer por ti.

• Que es la tecnología Java?

• Que puede hacer Java?

• Como Java influirá en mi vida?

La tecnología JavaLa tecnología Java engloba la plataforma y el lenguaje.

El lenguaje JavaEl lenguaje de programación Java es un lenguaje de alto nivel que se caracteriza por las siguientescaracterísticas:

Simple Arquitectura neutra

Orientado a objetos Portátil

Distribuible Alto rendimiento

Multihilos Robusto

Dinámico Seguro

Cada uno de las características se explica en “El entorno del lenguaje Java”, una parrafada escrita por JamesGosling y Henry McGilton.

En el lenguaje Java, todo el código fuente se escribe primero en un archivo con texto plano y con el nombre delarchivo terminado en .java. Las fuentes compiladas producen archivos .class y se hace mediante el uso delcompilador javac.

Un archivo .class no contiene código nativo para tu procesador, en su lugar contiene bytecode, que es ellenguaje de la máquina virtual Java. La herramienta de ejecución ejecuta tu aplicación en una instancia de laJVM.

Page 3: NETBEANS_JAVA.odt

Ya que la JVM está disponible en muchos sistemas operativos, el mismo fichero .class es capaz de ejecutarse enWindows, Solaris, Linux, o Mac.

Algunas máquinas virtuales como JAVA SE HotSpot at a Glance, ejecutan pasos adicionales en tiempo deejecución para dar a tu aplicación mas velocidad. Esto incluye tareas como buscar perdidas de rendimiento yrecompilación (al modo nativo) de secciones de código usadas frecuentemente.

La plataforma JavaLa 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 mayoría de lasplataformas pueden ser descritas como una combinación de sistemas operativos y hardware. La plataforma Javadifiere de las otras plataformas que es únicamente software.

La plataforma Java tiene dos componentes:

• La máquina virtual Java

• Las interfaces de programación de la aplicación (APIs).

Ya te hemos presentado la máquina virtual, es la base para la plataforma Java y se encuentra dentro de otrosistema operativo con base parcial de hardware.

Las APIs son una gran colección de software listo para usar que proveen de otras capacidades. Son un grupo de

Page 4: NETBEANS_JAVA.odt

librerías o clases e interfaces llamadas paquetes. En la siguiente sección, “Qué puede hacer la tecnología 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 código nativo. Sinembargo, los avances en el compilador y en la máquina virtual estan trayendo mejor rendimiento, cercano alcódigo nativo sin restar portabilidad.

Los términos “Máquina Virtual Java” quieren decir, Máquina Virtual para la plataforma Java.

Que puede hacer la tecnología Java?El propósito general es el de un lenguaje de alto nivel con una poderosa plataforma. Cada implementación deJava te da las siguientes características:

• Herramientas de desarrollo. Las herramientos de desarrollan te dan de todo lo que necesitas para

compilar, ejecutar, monitorizar, debuguear y documentar tus aplicaciones. También como nuevodesarrollador, la principal herramienta que usarás será el compilador javac, el lanzador java y laherramienta de documentación javadoc.

• Interfaces de programación de la aplicación (API, Application Programming Interface).Las APIs

proveen de funcionalidad al lenguaje Java. Ofrece un amplio abanico de clases preparadas para ser

usadas en tu aplicación. Crea toda clase de objetos, desde los básicos a internet y seguridad, base dedatos XML y mas. Las APIs del core son muy extensas. Para ver una aproximación de lo que contiene,puede leer la documentación de la plataforma Java 7.

• Utilización de la tecnología. El software JDK provee de mecanismos estándares 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). • Integración de librerías. Integra librerías como IDL API, JDBC, Java Naming and Directory Interface

(JNDI), RMI, y Java Remote Method Invocation over Internet Inter-ORB Protocol Technology (JAVARMI-IIOP Technology) hace posible el acceso a base de datos y la manipulación de objetos remotos.

Cómo cambiará mi vida la tecnología Java?No podemos prometerte la fama, fortuna o incluso un trabajo si aprendes a programar java. Pero si podemosdecirte que harás tus programas con menor esfuerzo que si lo hicieras con otros lenguajes. Creemos que latecnología Java te ayudará con:

• Empezar rápidamente. Aunque la programación en Java es absolutamente orientada a objetos, es fácil

Page 5: NETBEANS_JAVA.odt

de aprender, especialmente para programadores familiarizados con C o C++. • Escribir menos código. En comparación con la métrica de un programa (número de clases, número de

métodos, etc) te podemos decir que un programa escrito en Java ocupa cuatro veces menos que unprograma escrito en C++.

• Escribe mejor código. El lenguaje de programación Java te ánima a escribir usando buenas prácticas, y

el recogedor automático de basuras te ayuda con las pérdidas de memoria. Orientado a objetos, con laarquitectura de Java Beans y su amplio rango de posibilidades, lo hacen fácilmente extensible a otrasAPI que tu permitas su uso, código probado y contiene los mínimos bugs.

• Desarrolla programas mas rápidamente. El lenguaje de programación Java es mas simple que el C++, y

por eso, tus desarrollos pueden ser completados en la mitad de tiempo. Tus programas requieren demenos líneas de código.

• Distribuye software mas rápidamente. Con Java Web Started, los usuarios podrán ejecutar tus

aplicaciones con un simple click de ratón. Una versión automática comprueba el arranque y asegura alusuario estar siempre actualizado con la última versión de tu software. Si hay una actualizacióndisponible, Java Web Start automáticamente ejecutará la actualización.

La aplicación Hello world! Con NetBeans.Ya es hora de escribir nuestra primera aplicación. Estas instrucciones detalladas se usan para los usuarios deNetBeans. Puedes usar Eclipse también, el uso es bastante parecido. Una IDE como NetBeans o Eclipse seejecuta sobre Java, lo que significa que si existe un JDK para ese sistema operativo, puedes usar cualquiera deestas IDEs.

Comprueba que tienes lo necesario.

Para escribir tu primer programa necesitarás:

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

2. NetBeans o Eclipse

Creando tu primera aplicaciónTu primera aplicación, 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

aplicación. Al usar un IDE te ahorras lo que harías desde la consola de comandos. Puedesconstruir o ejecutar tus aplicaciones tan solo eligiendo un opción en el menú.

• Añadir código al fichero que acabas de generar.

• Un fichero fuente contiene código escrito en Java, que tú y otros programadores

pueden entender. Esto forma parte del proceso de crear un proyecto con una IDE. Losficheros se crean de forma automática. Modificarás el código fuente añadiendo tumensaje.

• Compilar el fichero fuente para obtener un fichero .class.

Page 6: NETBEANS_JAVA.odt

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

forma que la máquina virtual pueda entenderlo. Las instrucciones obtenidasse llaman bytecode.

• Ejecuta el programa.

• La IDE invoca también también al lanzador, se llama java, que usa la

máquina virtual para ejecutar la aplicación.

Crear un proyectoPara crear un proyecto:

1. Ejecuta la IDE (NetBeans o Eclipse).

2. En el menú File elige, New Project.

3. En la ventana elige, aplicación Java.

Page 7: NETBEANS_JAVA.odt

4. En las páginas 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.

Page 8: NETBEANS_JAVA.odt

6. Click en Finish.

El proyecto se ha creado y el IDE esta listo. Deberías ver los siguientes componentes:

• La ventana de proyecto, que contiene un árbol de los componentes del proyecto, incluyendo los

ficheros fuente, librerías de las que puedas depender, y demás etc. • La ventana de edición llamada HelloWorldApp.

• La ventana de navegación, que te será de utilidad para navegar entre las diferentes clases.

Page 9: NETBEANS_JAVA.odt

Añade la plataforma JDK 7 si es necesario.Con Eclipse puedes saltarte todos estos pasos, no son necesarios y tampoco existen.

Podría ser necesario añadir JDK7 a la lista de plataformas disponibles. Para hacer esto, elige Tools / JavaPlataforms, como se muestra aquí:

Page 10: NETBEANS_JAVA.odt

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

Para seleccionar JDK por defecto para tus proyectos, puedes ejecutar el IDE con –jdkhomes en la línea decomandos, o poniendo la ruta del JDK en netbeans_j2sdkhome en tu directorio de instalación / etc /netbeans.conf.

Para especificar este JDK en el proyecto actual únicamente, selecciona la aplicación Hello World App en elpanel de proyectos, elige File / Project Properties (Hello World App), click en Libreries y luego selecciona JDK7 bajo la plataforma Java en el menú de abajo. Deberias ver una pantalla similar a esta:

Page 11: NETBEANS_JAVA.odt

Añadir código al fichero del código fuente.Cuando hayas creado este proyecto, dejaste la checkbox marcada con Create Main Class. La IDE ha creado elcódigo necesario por ti. Solo tienes que añadir el mensaje escribiendo:

System.out.println("Hello World!"); // Display the string.

Si quieres, puedes reemplazar las líneas de comentario:

/** * * @author */

Por

/** * The HelloWorldApp class implements an application that * simply prints "Hello World!" to standard output. */

Estas líneas de comentario no afectan en absoluto en como el programa va a funcionar, serán ignoradas por elcompilador. Sólo son útiles a los programadores.

Page 12: NETBEANS_JAVA.odt

Cuidado cuando escribas a y ATodo el código, comandos, nombres de ficheros se manejan exactamente tal como se han nombrado. Elcompilador y el lanzador son sensibles a las mayúsculas, 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 debería 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 código fuente, elige Run / Build Main Project desde el menú principal. La ventana de salida seabre y mostrará una salida similar a lo que ves aquí:

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

Page 13: NETBEANS_JAVA.odt

Si por el contrario obtienes BUILD FAILED, probablemente tienes un error de sintaxis en tu código. Loserrores se reportan en la ventana de salida como un hipervínculo. Con doble click puedes navegar a la fuentedel error. Luego podrás arreglar el error y construir tu proyecto.

Cuando hayas obtenido el bytecode, obtendrás un fichero HelloWorldApp.class. Puedes ver donde se hagenerado 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 programaDesde la barra de menú, elige Run / Run Main Project.

La ventana de salida mostrará el mensaje:

Continuando el tutorial con el IDE de NetBeansLas siguientes páginas del tutorial explicaran el código de esta aplicación. Después de eso, las lecciones semostraran en un camino mas profundo hacia las características del core, y proveen de mas ejemplos.

Aunque el resto del tutorial no da instrucciones específicas sobre el uso de la IDE, puedes escribir y ejecutar deforma sencilla tu propio código.

Page 14: NETBEANS_JAVA.odt

El autor de esta traducción te anima a que pruebes Eclipse, para usar las mismas herramientas que usan losdesarrolladores originales de L2J, además, en mi parecer es mas intuitivo y requiere de menos acciones paracrear, compilar, y debuguear tu código.

Los siguientes puntos describen el comportamiento que normalmente usarás en el IDE:

• Una vez que hayas creado un proyecto, puedes añadir ficheros al proyecto usando New File.

• Puedes compilar y ejecutar individualmente (lo contrario que sería ejecutar un proyecto).

• Puedes crear diferentes proyectos IDE que incluyan mas de un fichero fuente.

• Mientras escribes código, una caja de autocompletado se abre automáticamente para ahorrarte el

tiempo que necesitas para escribir el comando completo. Si no quieres esta ayuda, Tools / Options /Editor y click en la pestaña 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 diálogo y actualizará el código delproyecto que se ha referido a esta clase.

• Para mas información, tienes la documentación de NetBeans aquí.

Una mirada mas cercana a la aplicación Hello World.Ahora que has visto la aplicación (y quizás la hayas compilado y ejecutado), puedes estar preguntándote comofunciona.

Aquí está el código otra vez:

class HelloWorldApp {

public static void main(String[] args) {

System.out.println(“Hello World!”); // Display the string.

}

}

La aplicación Hello World consiste en tres componentes primarios, el comentario del código fuente, ladefinición de la clase HelloWorldApp y el método main. La siguiente explicación que te dará un entendimientobásico del código, pero una implicación mas profunda serán solo evidentes cuando hayas terminado de leer estetutorial.

Comentarios del código fuenteEl siguiente código define los comentarios de Hello World:

/**

* The HelloWorldApp class implements an application that

Page 15: NETBEANS_JAVA.odt

* simply prints “Hello World!” to standard output.

*/

Los comentarios son ignorados por el compilador pero son útiles para otros programadores. La programaciónen Java soporta tres clases de comentarios:

// Este es un comentario/* Este es otro comentario *//*** y este es el ultimo*/

El compilador ignorará estas líneas, no aparecen en el código del fichero class.

La definición de la clase HelloWorldAppEl 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 básica para definir una clase es la palabra clave class seguida del nombreencerrando el código entre llaves.

El método “main”El siguiente código muestra la definición del método main():

public static void main(String[] args) { System.out.println("Hello World!); // Display the string. }

En Java cada aplicación debe tener un método cuya firma es:

public static void main(String[] args)

Los modificadores public y static pueden ser escrito en otro orden, pero la convención es usarlo en el orden quese ha mostrado. Los argumentos pueden usar el nombre que quieras, lo habitual es poner args, o argv.

El método main() es similar a la función main en C y C++, es el punto de entrada de tu aplicación ysubsecuentemente invocará los otros métodos requeridos por tu programa.

El método main() acepta un solo argumento: un array de elementos de tipo String.

Este array es el mecanismo a través del cual en sistema en tiempo de ejecución le pasa información a tuaplicación. Por ejemplo:

Page 16: NETBEANS_JAVA.odt

java MyApp arg1 arg2

Cada cadena en el array se llama argumento en la línea de comando. Esto permite a los usuarios influir en laoperación de la aplicación sin recompilarla. Por ejemplo, un programa que permita al usuario ordenar los datosen orden descendente podría usar esta línea de comando:

-descending

La aplicación HelloWorldApp ignora los argumentos de la línea de comandos, pero deberías de haberte dadocuenta de que tales argumentos existen.

Finalmente, la línea:

System.out.println("Hello World!");

Usa la clase System de la librería para imprimir el mensaje. Parte de esta librería (también conocida como la“Interface de programación de la Aplicación” (API)) será vista reiteradamente en este tutorial.

Page 17: NETBEANS_JAVA.odt

Preguntas y ejercicios: Empezando

Preguntas:Pregunta 1: Cuando compilas un programa escrito en Java, el compilador convierte el código legible porhumanos en código fuente para la plataforma independiente de Java. Como se llama el código de estaplataforma independiente?

Pregunta 2: Cuales de estos no son válidos como línea 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 ejecución?

Exception in thread “main” java.lang.NoClassDefFoundError:

HelloWorldApp.java.

Pregunta 4: Cual es la firma correcta del método main()?

Pregunta 5: Cuando se declara el método main(), cual modificador debería ir primero, public o static?

Pregunta 6: Que parámetros define el método main()?

Ejercicios

Ejercicio 1: Cambia el texto del programa HelloWorldApp.java.

Ejercicio2: Puedes encontrar una ligera modificada versión 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.

Page 18: NETBEANS_JAVA.odt

* * 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é código, contiene un error, arréglalo para que pueda compilar y ejecutarse. Cual era el error?

Respuestas:

Pregunta 1: El código producido por la compilación para la plataforma se le llama bytecode.

Pregunta 2: La opción 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 método 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 convención se escribe antes public y luegostatic.

Pregunta 6: Los parámetros que se definen en el método main() es sólo uno, y se trata de un array de tipoString, con un nombre cualquiera pero normalmente se usa args.

Ejercicios

Ejercicio 1: Cambiar el texto del mensaje:

Page 19: NETBEANS_JAVA.odt

System.out.println("Hola me mudo!");

Ejercicio 2: El error de la versión ligeramente modificada. Cuando intentas compilar el programa, elcompilador arroja en la consola:

HelloWorldApp2.java:7: unclosed string literalSystem.out.println("Hello World!); //Display the string. ^HelloWorldApp2.java:7: ')' expectedSystem.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 línea de códigocorregida:

System.out.println("Hello World!"); //Display the string.

Page 20: NETBEANS_JAVA.odt

Problemas y soluciones

Problemas del compiladorLos 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 enc:\jdk1.7.0. En el prompt deberías escribir el siguiente comando y presionar Enter.

C:\jdk1.7.0\bin\javac HelloWorldApp.java

Si eliges esta opción, tendrás que preceder con la ruta de donde se encuentra Java cada vez que quieras usarcualquier comando Java, como java o javac. Para evitarlo, consulta la sección de actualización de la variablePATH en las instrucciones de instalación de JDK7.

Class names, ‘HelloWorldApp’, are only accepted if annotation processing is explicitly requested

Si recibes este error es que has olvidado incluir la extensión .java al querer compilar el archivo con tu códigofuente. Recuerda, se usa javac programa.java, no javac programa.

Problemas en tiempo de ejecución

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, deberías de cambiar tu directorio actual a ese. Para cambiar tu directorio, escribe el siguientecomando en el prompt y presiona Enter:

cd c:\java

El prompt debería de cambiar a C:\java. Si escribes dir en el prompt, deberías ver tus ficheros .java y .class.

Ahora escribe nuevamente java HelloWorldApp nuevamente.

Si todavía tienes problemas, deberías de editar tu variable CLASSPATH. Para ver si esto es necesario, intentatrastear la variable con este comando:

set CLASSPATH=

Page 21: NETBEANS_JAVA.odt

Ahora prueba otra vez java HelloWorldApp. Si el programa funciona ahora, tendrás que cambiar tu variableCLASSPATH. Para editar esta variable, consulta Updating the Path Variable en la sección de instalación delJDK7. La variable CLASSPATH se edita de la misma manera.

Could not find or load main class HelloWorldApp.class

Un error común en los principiantes es intentar ejecutar el lanzandor java sobre el fichero .class que has creadocon el compilador. Por ejemplo, obtendrás este error, si ejecutas java HelloWorldApp.class en lugar de javaHelloWorldApp. Recuerda que el argumento es el nombre de la clase que quieres usar, no el nombre delfichero.

Exception in thread “main” java.lang.NoSuchMethodError: main

La JVM requiere que tu clase se ejecute con el método main() que es el que inicia la ejecución de tu aplicación.

Applet o las aplicaciones de Java Web Start están bloqueadas.Si estás ejecutando una aplicación a través del navegador y obtienes advertencias de seguridad que dicen que laaplicación 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 pestaña Files y haciendo doble click enmanifest.mf.

• Si estas ejecutando el applet en modo local en un webserver que usas para comprobar el código, la

barra deslizante de seguridad de Java en el panel de control debe ser puesto a Medium para podertrabajar con los applets locales, sin embargo esto no se recomienda por razones de seguridad.

Page 22: NETBEANS_JAVA.odt

2.0 Aprendiendo el lenguaje Java

Este trail cubre los fundamentos de programación del lenguaje Java.

2.1 Conceptos sobre programación orientada a objetos.Te enseña los conceptos del core además de la programación orientada a objetos: objetos, mensajes, clases,herencia. Esta lección finaliza mostrando como estos conceptos se traducen en código. Puedes saltarte estalección si ya estas familiarizado con la programación orientada a objetos.

2.2 Bases del lenguajeDescribe las características tradicionales del lenguaje, incluyendo variables, arrays, tipos de datos, operadoresy control de flujo.

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

2.4 Interfaces y herenciaDescribe las interfaces, que son, porque vas a estar interesado en escribir una, como crear una. Esta seccióntambién te muestra la manera en la que puedes derivar una clase de otra. En definitiva, como una subclasepuede heredar campos y métodos de una superclase. Aprenderás que todas las clases derivan de la clase Object,y como modificar los métodos que una subclase hereda de la superclase.

2.5 Números y cadenasEsta lección describe cómo usar Number y String. También se muestra como formatear los datos.

2.6 GenéricosEs una poderosa característica de Java. Mejoran la seguridad de tu código, hace que los bugs en tu código seandetectables en tiempo de compilación.

2.7 PaquetesOtra característica de Java que ayuda a organizar y estructurar tus clases y la relación entre ellas.

Page 23: NETBEANS_JAVA.odt

2.1 Concepto de la programación orientada a objetosSi nunca has programado un lenguaje orientado a objetos antes, necesitarás saber unos conceptos básicos antesde escribir cualquier código. Esta lección te introducirá a los objetos, clases, herencias, interfaces y paquetes.Cada discusión se centra en cómo estos conceptos se relacionan en el mundo real, y cómo se escribe en ellenguaje Java.

2.1.1 Qué es un objeto?Un objeto está hecho con software, líneas de código. Este objeto tiene un estado y un comportamiento. Losobjetos se relacionan con la vida real, cosas cotidianas. Esta lección explica cómo se representa el estado y elcomportamiento en un objeto, te presenta el concepto de encapsulación de datos y te explica los beneficios deldiseño de tu software aplicando esta técnica.

2.1.2 Qué es una clase?Una clase es un proyecto o prototipo de los objetos que se crean. Esta sección define una clase que modela elestado y el comportamiento de un objeto en el mundo real. Intencionadamente se centra en lo básico,mostrándote cómo 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 secciónexplica como las clases heredan un estado y un comportamiento a partir de sus superclases, y explica comoderivar 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, lehace prometer que proveerá el comportamiento publicado en la interface y explica los cambios necesarios paraque 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 lógica. Alponer tu código en paquetes, estás haciendo los software de gran tamaño sean más fáciles de manejar. Estasección explica su utilidad, y te presenta las interfaces de programación de las aplicaciones (APIs) que tiene laplataforma Java.

2.1.6 Preguntas y ejercicios: Conceptos de la programación orientada a objetos.Usa las preguntas y los ejercicios presentados en esta sección para probar que entendiste que son objetos,clases, herencias, interfaces y paquetes.

Page 24: NETBEANS_JAVA.odt

2.1.1 Qué es un objeto?Los objetos son clave para entender la tecnología de la programación orientada a objetos. Si miras a tualrededor ahora, encontrarás muchos ejemplos de objetos en la vida real, tu perro, tu escritorio, tu televisión, tubicicleta.

En la vida real, los objetos comparten dos características: todos tienen un estado y un comportamiento. Losperros tienen estado (nombre, color, pelo, hambre) y comportamiento (ladra, juega, mueve el rabo). Lasbicicletas también 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 losobjetos en el mundo real es una fantástica manera de empezar en términos de programación orientada a objetos.

Toma un minuto ahora para observar los objetos del mundo real que te rodean. Por cada objeto que veas,pregúntate dos cosas “Que estados puede tener?” y “Qué cosas pueden hacer?” Asegúrate de apuntar en tusobservaciones. Como ya sabes, te darás cuenta de que hay muchos objetos de variedada complejidad, lalámpara 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 cuentade que algunos objetos contienen otros objetos. Estas observaciones en el mundo real se traducen al mundo dela programación orientada a objetos.

Los objetos en el software son similares de igual manera, también consisten en un estado y un comportamientorelacionado. Los objetos guardan en campos sus estados (variables en algunos lenguaje de programación) yexponen su comportamiento a través de métodos (funciones en algunos lenguaje de programación).

Los métodos operan en el estado interno del objeto y sirven como mecanismo primario de comunicación paraque un objeto se comunique con otro. En un estado interno, oculto, encuentran los estados del objeto,únicamente accesible desde los métodos, a esto se le denomina encapsulación, otro principio fundamental delprogramación orientada a objetos.

Imagínate una bicicleta, por ejemplo:

Page 25: NETBEANS_JAVA.odt

Los estados atribuibles (velocidad actual, cadencia del pedaleo y marcha actual) y los métodos que provee paracambiar ese estado, hacen que los objetos del mundo exterior puedan usarlo. Por ejemplo, si la bicicleta tienesolo seis marchas, el método que cambia las marchas podría rechazar cualquier valor fuera de la escala (1 a 6)por petición de otro objeto.

Agrupar el código dentro de los objetos (hablamos del software) te otorga de ciertos beneficios incluyendo:

• Modularidad. El código fuente del objeto puede ser escrito y mantenido independientemente del

código fuente de otros objetos. Una vez creado, un objeto puede ser fácilmente pasado al sistema. • Información privada. Al interactuar solo con los métodos de los objetos, los detalles internos de su

implementación quedan ocultos al mundo exterior. • Código reusable. Si un objeto ya existe (quizás escrito por otro desarrollador de software), puedes

usarlo en tu programa. Esto te permite ahorrar tiempo ya que la implementación, evaluación, y tareasde debug ya fueron realizadas por el otro programador y puedes confiar en su código.

• Mayor adaptación al acople y depuración. Si un objeto en particular se vuelve problemático, puedes

quitarlo fácilmente de tu aplicación y colocar en su lugar otro que los sustituya. Este arreglo es análogoen 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. Puedenhaber miles de bicicletas, todas del mismo modelo. Cada bicicleta construida usando el mismo proyecto y losmismos componentes. En términos de programación orientada a objetos, decimos que tu bicicleta es unainstancia de una clase llamada bicicleta. Una clase es el prototipo del cual se crean objetos.

Esta clase bicicleta podría ser una posible implementación de una bicicleta:

class Bicycle { int cadence = 0; int speed = 0; int gear = 1; void changeCadence(int newValue) {

Page 26: NETBEANS_JAVA.odt

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 programación Java puede ser nueva para ti, pero el diseño de la clase está basada en unadiscusión anterior cuando hablábamos de los métodos de las bicicletas. Los campos, cadencia, velocidad,marcha, representan el estado de la bicicleta. Los métodos actúan sobre el estado de la bicicleta. Podemoscambiar la cadencia, cambiar de marcha, acelerar, frenar y el último método sirve para mostrar en la consola elestado del objeto bicicleta.

Te has podido fijar que la clase Bicycle no tiene método main(). Esto se debe a que la aplicación no estácompleta. Esto es solo el prototipo que otra aplicación puede usar para crear una bicicleta.

Este código llamado BicycleDemo, crea dos bicicletas a partir de la clase Bicycle para luego invocar susmétodos:

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);

Page 27: NETBEANS_JAVA.odt

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:2cadence:40 speed:20 gear:3

2.1.3 Qué es la herencia?Diferentes clases de objetos tienen a menudo cosas en común. Mountain bikes, road bikes, tándem bikes,…todos estos son por ejemplo, comparten las características de las bicicletas (velocidad actual, cadencia depedaleo, marcha actual). Pero también tienen unas características adicionales que las hacen un tanto distintas, labicicleta tándem tiene dos asientos, la road bike tiene manillares caidos, algunas mountain bikes tienen unacadena adicional para ganar más empuje en el giro.

En la programación orientada a objetos se permite que las clases hereden las características comunes de otrosobjetos, y también su comportamiento. En este ejemplo, Bicycle ahora se convierte en la superclase deMountainBike, RoadBike y TandemBike. En el lenguaje Java, cada clase puede heredar una superclase y cadasuperclase puede ser heredada sin limitación:

La sintaxis para crear una subclase es simple. Al comienzo de la declaración de la clase, se usa la palabra claveextends seguida de la clase que quiere heredar.

class MountainBike extends Bicycle { // new fields and methods defining // a mountain bike would go here }

Page 28: NETBEANS_JAVA.odt

Esto le da a MountainBike todos los campos y métodos que tiene Bicycle, pero su código puede serdesarrollado de manera única. Tienes que tener cuidado con el comportamiento y el estado que cada superclasedefine, ya que el código 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 través de los métodos queexponen.

Una interfaz en el mundo real podría ser los botones del televisor. Estos se encuentran entre los componenteseléctricos y la carcasa del televisor. Presionas el botón de apagado y la tele se apaga.

En la forma más común, una interfaz es un grupo de métodos con el cuerpo del código vacío. Elcomportamiento de una bicicleta, si lo especificamos en una interfaz sería 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 debería cambiarse (a uno mas particular, comoACMEBicycle) y usarás la palabra clave implements en la declaración de la clase, seguida del nombre de lainterfaz.

class ACMEBicycle implements Bicycle { // remainder of this class // implemented as before}

Al implementar una interfaz haces que tu clase sea más formal en cuanto al comportamiento que prometeproveer. Las interfaces son un contrato entre la clase y el mundo exterior, y este contrato se tiene que cumpliren tiempo de compilación. Si tu clase implementa una interfaz, todos los métodos definidos en la interfaz debenaparecer en el código de la clase antes de que la clase compile.

Nota: Para que compile esta clase ACMEBicycle, necesitaras añadir la palabra clave “public” al comienzo delos métodos de la interface. Aprenderás las razones más 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.

Page 29: NETBEANS_JAVA.odt

Conceptualmente puedes pensar que se trata de las carpetas de tu ordenador. Ya que el software escrito en Javapuede estar compuesto de cientos o miles de clases, tiene sentido querer pensar en cómo organizar tu proyecto.

La plataforma de Java provee de enormes librerías de clases (ordenados en paquetes) disponibles para tuspropias aplicaciones. Estas librerías se las conocen como APIs (Application Programming Interface). Suspaquetes representan la mayoría de las tareas asociadas con el propósito general de la programación. Porejemplo, el objeto String contiene estado y comportamiento para los caracteres de cadena, un objeto Filepermite a un programador crear, inspeccionar, modificar o borrar fácilmente un fichero, un objeto Socket tepermite crear y usar redes, varios GUI como los botones, cajas de texto y demás están relacionados con lainterfaz gráfica del usuario. Literalmente existen miles de clase para elegir. Esto te permite como programador,enfocarte en el diseño de la aplicación, en lugar de crear la infraestructura para que el software realice eltrabajo.

Las especificaciones de las API en Java contienen una lista completa de los paquetes, interfaces, clases, camposy métodos que Java SE provee. Carga la página en tu navegador y ponga como favorito. Como programador, seconvertirá en una de las herramientas mas usadas como documentación y referencia.

2.1.6 Preguntas y ejercicios

Preguntas

1. En el mundo real los objetos contienen _____ y _____. 2. El estado de un objeto se guarda en _____. 3. El comportamiento de un objeto se expone a través de _____. 4. Esconder los datos del mundo exterior y hacerlos accesibles solo por medio de métodos es una técnica

que se conoce como _____. 5. Al proyecto de un objeto se le conoce como _____. 6. Los comportamientos comunes deberían ser definidos en una _____ y heredarse en una _____ usando

la palabra clave _____. 7. Una colección de métodos sin código (es decir, sin implementación) e le conoce como ______. 8. Un directorio que organiza las clases y las interfaces por su funcionalidad se la conoce como _____. 9. El termino API significa ______.

Ejercicios

1. Crea una clase para cada objeto que viste en este módulo del mundo real. Repasa la clase Bicycle siolvidaste la sintaxis.

2. Para cada clase que creasate, crea una interfaz que defina su comportamiento, luego haz otra clase quela implemente. Omite uno o dos métodos e intenta compilar. Que ocurre?

Respuestas a las preguntas.

1. Estado y comportamiento. 2. Campos. 3. Métodos. 4. Encapsulación. 5. Clase

Page 30: NETBEANS_JAVA.odt

6. Superclase, subclase, extends. 7. Interface. 8. Package. 9. Application Programming Interface, o, interfaz de programación de la aplicación.

Respuesta a los ejercicios.

1. La respuesta variará dependiendo de los objetos. Puedes postearlas en el blog. 2. La respuesta variará según los métodos no implementados, pero el error es la omisión de métodos que

la interface te obliga a crear.

2.2 Bases del lenguaje

2.2.1 VariablesYa has aprendido que los objetos guardan sus estados en los campos. Sin embargo, en el lenguaje deprogramación Java también usa el término variables. En esta sección se discute esta relación, además de laconvención para nombrar las variables, tipos de datos básicos (primitivos, carácter, cadenas y arrays), variablespor defecto y literales.

2.2.2 OperadoresEsta sección describe los operadores en Java. Presenta los más comunes primeros, y los menos habituales alfinal. Cada discusión incluye ejemplos de código que puede compilarse y ejecutarse.

2.2.3 Expresiones, estamentos y bloquesLos operadores pueden ser usados en expresiones de construcción, los cuales computan valores, las expresionesson el centro de los componentes de los estamentos, los estamentos pueden ser agrupados en bloques. Estasección discute las expresiones, estamentos y bloques usando código como ejemplo que ya has visto.

2.2.4 Estamentos de control de flujoEsta sección describe los estamentos de control de flujo soportados por Java. Cubre los bucles, loscondicionales, y estamentos de ramificación que permite a los programas ejecutar partes del código de unbloque.

2.2.1 VariablesComo ya has deberías 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 término de los campos. Pero quizás todavía te quedenalgunas preguntas como:

• “Cuáles son las reglas y convenciones para nombrar a los campos?”

Page 31: NETBEANS_JAVA.odt

• “Además 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 ningún valor?”

Veremos todo esto en esta lección, pero antes, hay unas distinciones técnicas que tienes que saber. En Java, seutilizan los términos campos y variables, por lo que es fuente de confusión entre desarrolladores, ya que parecereferirse a la misma cosa.

El lenguaje de programación Java define las siguientes clases de variables:

• Variables de instancia (no son campos estáticos). Técnicamente hablando, los objetos guardan sus

estados en campos no estáticos, que son campos declarados sin la palabra clave static. Los campos noestáticos son también conocidos como variables de instancia porque su valor únicamente está pensadopara funcionar con la instancia de una clase (de un objeto).

• Variables de clase (son campos estáticos). Una variable de clase es cualquier campo declarado con el

modificador static, esto le dice al compilador que hay sólo una copia de esta variable, sin importarcuantas veces haya sido instanciada la clase. Un campo que defina el número de marchas para unaclase de bicicleta podría ser marcada como estática ya que el número de marchas sería el mismo paratodas las instancias de esa bicicleta. El código static int numGears = 6; debería de crearse en un campoestático. Además podríamos usar la palabra clave final para garantizar que el número de marchas nopuede ser alterado.

• Variables locales. La sintaxis es la misma que en los campos, pero se usan en los métodos para

guardar su estado temporalmente. No hay palabras clave especiales para las variables locales. Este tipode variable sólo son visibles en el método donde se crean y no son accesibles para el resto de la clase.

• Parámetros. Ya has visto ejemplos de parámetros. En el método main(String [] args) la variable args

es un parámetro. El dato importante es que los parámetros no se clasifican como campos, sino comovariables. Esto se aplica a los constructores también o a manejadores de excepciones. Los veremos másadelante.

Habiendo dicho esto, tengo que decir que el resto del tutorial usa estas directrices cuando se habla sobre campoy variables. Si hablamos sobre campos en general (se excluyen las variables locales y parámetros), nosotrosdiremos campos. Si se habla de variables, incluirá todo lo expuesto arriba. Si el contexto necesita hacerdistinciones, usaremos los términos específicos (campo estático, variable local, etc…). Ocasionalmente puedesencontrar el término “miembro”. El tipo de los campos, métodos y tipos anidados en su conjunto se lesdenomina miembros.

Nomenclaturas

Cada lenguaje de programación tiene su propia serie de reglas y convenciones para las clases de nombres quese está permitido usar, y Java no es diferente. Las reglas y las convenciones para la nomenclatura se resume deesta manera:

• Los nombres de las variables son sensibles a las mayúsculas y minúsculas. Puede usar cualquier

identificador legal, longitud cualquiera de caracteres Unicode y dígitos, comenzando el nombre poruna letra, el símbolo $ o el guion bajo _. Sin embargo por convención se comienza por una letra, y elsímbolo dólar no se usa. Puede que en alguna situación donde los nombres se generen de formaautomática, los encuentres, pero se debería evitar siempre su uso, lo mismo que para el guion bajo. No

Page 32: NETBEANS_JAVA.odt

se permite el espacio en blanco. • Los siguientes caracteres pueden ser letras, números, el signo dólar o el guion bajo. Las mismas reglas

de la convención se aplican aquí también. Cuando elegimos nombres de variables, debemos usarpalabras completas en lugar de criptogramas. Haciendo esto, haces el código más fácil de leer yentender. En muchos casos también hace que tu código se documente así mismo, los campos comocadena, velocidad y marcha por ejemplo, son muchos más 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 minúscula. Si son varias, la

primera letra después de cada palabra debe ir en mayúsculas: cambioMarcha, velocidadActual. Sinembargo, si se trata de una constante, todas se escriben en mayúsculas y se separa cada palabra con unguion: static final int NUMERO_MARCHAS = 6; El carácter del guion bajo no se usa en ningún otrocaso.

2.2.2 OperadoresAhora que has aprendido como declarar e inicializar variables, seguramente quieras saber cómo hacer algo conellas. Los operadores son símbolos que ejecutan operaciones específicas sobre uno, dos o tres operandos yluego devuelve un resultado.

Los operadores de la siguiente tabla están ordenados de mayor a menor preferencia. Esto significa que losoperadores por encima de la tabla serán ejecutados antes que los que quedan por debajo. Cuando hayoperadores con la misma preferencia en una misma expresión, una regla debe gobernar para saber cuál seevalúa primero. Todas las operaciones binarias excepto las de asignación son evaluadas de izquierda a derecha,los operadores de asignación se evalúan de derecha a izquierda.

Operadores PreferenciaPrefijo Var++ var–

Unitario ++var –var +var –var ~ !

Multiplicativo / % *

Aditivo + -

Corrimiento << >> >>>

Relacional < > <= >= instanceof

Igualdad == !=

Bitwise AND &

Bitwise exclusive OR ^

Bitwise inclusive OR |

Lógico AND &&

Lógico OR ||

Ternario ? :

Asignación = += -= /= %= &= ^= |= <<= >>= >>>=

En términos generales de programación, ciertos operadores tienden a aparecer más que otros, por ejemplo, eloperador de asignación = es más común que el operador de corrimiento hacia la derecha >>>. Con esto encuenta, la siguiente discusión se centra primero en los operadores que más vamos a usar, y terminaremos conlos más raros. Cada discusión se acompaña por un ejemplo de código que puedes compilar y ejecutar. Al

Page 33: NETBEANS_JAVA.odt

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

2.2.3 Expresiones, estamentos y bloquesAhora 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 computanvalores. Las expresiones son el núcleo de los estamentos, los estamentos pueden ser agrupados en bloques.

Expresiones

Una expresión es un constructor hecho con variables, operadores e invocaciones a métodos, que sonconstruidos de acuerdo a la sintaxis del lenguaje, y evalúan un solo valor. Ya has visto ejemplos de expresionescomo 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 3if (value1 == value2) System.out.println("value1 == value2");

El tipo de dato devuelto por una expresión depende de los elementos usados en la expresión- La expresióncadence=0 devuelve un int porque el operador de asignación devuelve un valor del mismo tipo que su operandode la izquierda. En este caso, cadence es un int. Tal como puedes ver en otras expresiones, la expresióndevuelve otros tipos de valor también, como boolean o String.

El lenguaje de programación Java te permite construir compendios de expresiones de varios tamaños, desde lasmás pequeñas hasta las más grandes que el tipo de dato requiere para que la expresión encaje con el tipo dedato del otro. Aquí, una expresión de un compendio de expresiones:

1 * 2 * 3

En este ejemplo en particular, el orden en el que las expresiones se evalúan no tiene importancia porque elresultado de la multiplicación es independiente del orden, la salida es siempre la misma. Sin embargo, esto nose cumple en todas las expresiones. Por ejemplo, la siguiente expresión te da una resultado distintodependiendo de si ejecutas la resta o la división primero:

x + y / 100 // ambiguous

Puedes especificar exactamente como será evaluada una expresión usando paréntesis (). Por ejemplo, parahacer esta expresión inambigua, podrías escribir:

(x + y) / 100 // unambiguous, recommended

Si no indicas explícitamente el orden en que se ejecutan los operandos, el orden se determina por el orden deprecedencia. Los operadores tienen un nivel de precedencia más alto y serán evaluados primero. Por ejemplo, la

Page 34: NETBEANS_JAVA.odt

división tiene una preferencia más alta que la suma. Sabiendo esto, podemos decir que estos estamentos daránel mismo resultado:

x + y / 100 x + (y / 100) // unambiguous, recommended

Cuando se escribe una expresión de compendios, se explicito e indica con paréntesis que operadores deberíaevaluarse primero. Esta práctica hace el código más fácil de mantener.

Estamentos

Los estamentos equivalen a las frases en un lenguaje natural. Un estamento forma una unidad de ejecución. Lossiguientes tipos de expresiones pueden ser creadas dentro de un estamento señalando con un punto y coma elfinal de la expresión.

• Expresiones de asignación

• Cualquier uso de ++ o –

• Invocaciones a métodos

• Objetos creando expresiones

Tales estamentos se les conocen como estamentos de expresión. Aquí hay algunos ejemplos de estamentos deexpresión:

// assignment statementaValue = 8933.234;// increment statementaValue++;// method invocation statementSystem.out.println("Hello World!");// object creation statementBicycle myBike = new Bicycle();

Además de los estamentos de expresión, hay otras clases de estamentos, los estamentos de declaración y los decontrol de flujo. Un estamento de declarion declara variables. Has visto muchos ya:

// declaration statementdouble aValue = 8933.234;

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

Bloques

Un bloque es un grupo de cero o más estamentos encerrados entre llaves y pueden ser usados en cualquier partedonde 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

Page 35: NETBEANS_JAVA.odt

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 flujoLos 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 ejecución empleando decisiones, bucles y llaves, haciendo que tu programa ejecute unos bloques en particular de manera condicional. En esta sección se describe los estamentos de decisión:

• 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 programación Java.

Page 36: NETBEANS_JAVA.odt

2.3 Clases y objetosCon el conocimiento que tienes ahora de las bases de programación Java, puedes aprender a escribir tus propiasclases. En esta lección, encontrarás información sobre como defininir tus propias clases, incluyendodeclaraciones de variables, métodos y constructores.

Aprenderás como usar tus clases para crear objetos, y como usar el objeto creado.

Esta lección también cubre las clases anidadas y las enumeraciones.

2.3.1 ClasesEsta sección te muestra la anatomía de una clase, como declarar campos, métodos y constructores.

2.3.2 ObjetosEsta sección cubre la creación 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 métodos de la instancia del objeto.

2.3.4 Más sobre clasesEsta sección cubre mas aspectos de las clases que dependen de usar las referencias del objeto y el operadorpunto que has aprendido en la sección anterior: el retorno de valores desde los métodos, la palabra clave this,clases y miembros de instancias, y control de acceso.

2.3.5 Tipos de enumeraciónEsta sección cubre las enumeraciones, clases especializadas que te permiten definir tu grupo de constantes.

2.3.1 ClasesEn la introducción de la lección titulada Conceptos de la programación orientada a objetos, usaba la claseBicycle como ejemplo, con bicicletas de carrera, bicicletas de montaña, y bicicletas tándem como sussubclases. Aquí hay un ejemplo de un código para una posible implementanción de una clase Bicycle, paradarte un ejemplo de la declaración de la clase. Las siguientes secciones de esta lección explicarán ladeclaración 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;

Page 37: NETBEANS_JAVA.odt

} // 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 métodos de Bicycle, además añade los campos setHeight y unmétodo para seleccionarlo (las bicicletas de montaña tienen asientos que pueden desplazarse arriba y abajosegún demanda del terreno).

2.3.2 ObjetosUn programa típico de Java crea muchos objetos, los cuales como ya sabes, interactúan al invocar sus métodos.A través de la interacción de estos objetos, un programa puede llevar a cabo varias tareas, tales comoimplementar una GUI, una animación, o enviar y recibir información de internet. Una vez que el objeto ha

Page 38: NETBEANS_JAVA.odt

completado el trabajo para el cual ha sido creado, sus recursos se reciclar para ser usado por otros objetos.

Este pequeño programa crea tres objetos, un Point y dos Rectangle. Necesitaras los códigos fuentes de estostres 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 rectOne’s 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 rectTwo’s position rectTwo.origin = originOne; // display rectTwo’s 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 información 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 unprograma. A partir de ellos, aprenderás como escribir código que crea y usa objetos en tus programas. También

Page 39: NETBEANS_JAVA.odt

aprenderás como el sistema elimina un objeto cuando su vida ha finalizado.

2.3.3 Mas sobre clasesEsta sección cubre mas aspectos de las clases que dependen de como se usan las referencias de los objetos y eloperador punto que has aprendido en la pasada sección:

• Devolución de valores de los métodos.

• La palabra clave this.

• Clases vs miembros de instancia.

• Control de acceso.

2.3.4 Clases anidadasEn el lenguaje de programación Java se te permite definir una clase dentro de otra. Tales clases se las conoce como clases anidadas:

class OuterClass { ... class NestedClass { ... }}

Terminología: Las clases anidadas se dividen en dos categorías, las estáticas y las no estáticas. Las clasesanidadas estáticas se las llama igual, clases anidadas estáticas, pero a las clases no estaáticas, se las llama clasesinternas.

class OuterClass { ... static class StaticNestedClass { ... } class InnerClass { ... }}

Una clase anidada es un miembro de su clase. Las clases anidadas nio estáticas tienen acceso a otros miembrosde 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 declaradaspublic 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 lógico que la clase se encuentre embebida en esa clase. Anidar tales clases hacen tu paquete mas racional.

• Incremementa la encapsulación, considera dos clases de alto nivel, A y B, donde B necesita acceso a

Page 40: NETBEANS_JAVA.odt

miembros de A que podría 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 demás clases.

• Puede hacer el código mas legible y hacer mas fácil el mantenimiento del código. Anidar las pequeñas

clases con clases de alto nivel ponen el código mas cerca de donde se usan.

Clases anidadas estáticas

Como ocurre con los métodos y variables, las clases anidadas se asocian con su clase externa. Y como esestática, no puede refererirse directamente a una variable de instancia o método dentro de la clase donde se haanidado. Solo puede ser usada por un objeto de referencia.

Nota: Una clase estática interactua con los miembros de instancia de su clase exterior (y otras clases) al igualque las clases de alto nivel. En efecto, una clase estática se comporta como una clase de alto nivel que ha sidoanidado en otra clase de alto nivel por conveniencia de paquete.

Clases internas

Al igual que los métodos y variables de instancia, una clase interna se asocia con una instancia de su clasesuperior (la clase donde se anida) y tiene acceso directo a los métodos y campos del objeto. Tambien, ya seconvierte en una clase interna asociada con una instancia, no puede ser definida con cualquier miembroestático.

Los objetos que están 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 losmétodos 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 elobjeto externo de esta manera:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

Hay dos clases especiales de clases internas, las clases locales y las clases anónimas.

Haciendo sombra

Si una declaración de un tipo (como una variable o el nombre de un parámetro) que tiene un tiempo limitado devida (como una clase interna o una definición de un método) tiene el mismo nombre que otra declaración en elmismo ciclo de vida, entonces la declaración hace sombra a la declaración de ese ciclo de vida. No puedesreferirte a una declaración sombreada solo por su nombre. El siguiente ejemplo lo muestra:

public class ShadowTest {

Page 41: NETBEANS_JAVA.odt

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 dela variable de la clase interna FirstLevel, y el parametro en el método methodFirstLevel. La variable x definidacomo parámetro del método methodInFirstLevel sombrea la variable de la clase interna FirstLevel.Consecuentemente, cuando usas la variable x en el método methodInFirstLevel, se refiere al parámetro delmétodo. 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 métodomethodInFirstLevel:

System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);