Académique Documents
Professionnel Documents
Culture Documents
0 Comenzando
Este trail provee de todo lo que necesitars saber para empezar a programar con Java.
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.
2. NetBeans o Eclipse
Crear un proyecto
Para crear un proyecto:
1. Ejecuta la IDE (NetBeans o Eclipse).
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.
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:
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.
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:
Ejecutar el programa
Desde la barra de men, elige Run / Run Main Project.
La ventana de salida mostrar el mensaje:
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.
/**
* The HelloWorldApp class implements an application that
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:
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.
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.
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.
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.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.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.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.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.
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.
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?
Estado y comportamiento.
Campos.
Mtodos.
Encapsulacin.
Clase
6.
7.
8.
9.
2.2
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.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?
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
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
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.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.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;
}
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:
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
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.
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 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);
}
}
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);