Sie sind auf Seite 1von 27

1 Punto y coma, bloques y espacios en blanco

1. En Java, todas las sentencias terminan en punto y coma 2. Un bloque viene definido entre llaves: {} y constituye una sentencia. 3. Los espacios en blanco estn permitidos entre elementos del cdigo fuente. Adems se permiten los tabuladores y retornos de carro, de tal forma que la apariencia del cdigo fuente sea ms legible.

{ int x; x = 23 * 54; } Esto es un ejemplo vlido de bloque de sentencias Java. En ste caso la primera es una declaracin de variable local entera de nombre x, y la segunda corresponde a una asignacin a dicha variable x del resultado de multiplicar dos literales numricos. El inicio del bloque est marcado por el smbolo de apertura de llave "{". Como vimos en el ejemplo HolaMundo del captulo anterior, despus de la declaracin de clase se inicia un bloque, as como despus de la declaracin de mtodo.

Prctica
Para ir viendo el resultado de las explicaciones crea una clase nueva de pruebas (llamada p.ej. Tema3 donde poder probar los ejemplos): 1. Abre JBuilder 2. Crea un nuevo proyecto 3. Escribe el siguiente cdigo en una nueva Clase:

public class Tema3 { public static void main (String args[]) { int x; x = 23 * 54; System.out.println(x); } }

4. Guarda y compila la Clase

2 Identificadores
1. En Java, un identificador comienza con una letra, subrayado (_), o un smbolo de dlar ($). Los siguientes caracteres pueden ser dgitos. 2. Se distinguen las maysculas de las minsculas y los identificadores no tienen longitud mxima. 3. Ejemplo de identificadores

int indice_bd1; char_nomarch; float $cantidad; 4. No son habituales identificadores que contengan el smbolo de dlar ($), puesto que algunos lenguajes tales como BASIC y Unix, junto con sistemas VAX VMS hacen un uso extensivo de tal carcter. Es preferible no utilizarlo.

Prctica
Modifica el cdigo de clase Tema3 para probar que los identificadores anteriores son vlidos:
public class Tema3 { public static void main (String args[]) { int indice_bd1; char _nomarch; float $cantidad; } }

Al compilar no debe dar ningn error. No tiene sentido ejecutarlo pues no tiene ningn resultado visible.

3 Palabras clave
Las palabras clave de Java, entre modificadores de clase, tipos, sentencias condicionales y constantes es:
abstract boolean break byte case catch char class continue default do double else extends false final finally public float new return for short if static implements super import while instanceof synchronized int this interface throw long throws native transient switch true null try package void private volatile protected

palabras clave

1. Los literales true, false, y null se escriben en minsculas, no en maysculas como en C++. 2. No existe el operador sizeof: el tamao y representacin de todos los tipos es fijo y no depende de la implementacin 3. goto y const son palabras clave, aunque no se utilizan

4 Tipos bsicos
Java define ocho tipos primitivos y uno especial. 1. Se pueden utilizar como valor literal o como variables 2. Estos ocho tipos se pueden agrupar en cuatro categoras: Lgica, Texto, Entero y Real

Tipos Lgicos: 1. El tipo boolean tiene dos valores literales:

true y

false

tipos lgicos

2. No existe "cast" entre tipos enteros y tipo boolean. Algunos lenguajes como C y C++permiten como lgicos, interpretar valores numricos normalmente considerando al distinto de cero como est permitido en Java

cero como falso y verdadero. Esto no

1. Los caracteres se representan mediante el tipo

char.

2. Un char representa un carcter Unicode mediante el rango de un nmero de 16-bit sin signo en 0..216-1

tipos texto
char y string

3. Un literal char debe ir entre comillas simples

(' ') 'a'

'\t' un tabulador '\u????' un carcter Unicode, ????


Representa 4 dgitos hexadecimales

4. El tipo String, que no es una primitiva, se utiliza para representar una secuencia de caracteres. 5. Un literal String debe ir entre comillas dobles:

String cadena = "The quick brown fox


jumped over the lazy dog"

1. Existen cuatro tipos de enteros en Java. 2. Los literales se pueden representar utilizando la forma decimal, octal o hexadecimal: 2 el valor decimal dos 077 el primer cero indica un valor octal 0xBABE 0x indica un valor en hexadecimal 3. Todos los tipos enteros en Java son nmeros con signo 4. Los literales enteros son del tipo int, a menos que vengan seguidos de la letra L. 2L

entero
byte, short, int, long

077L 0xBABEL Tamao y rango de los cuatro tipos de entero: Longitud Nombre o tipo Rango Longitud 8 bits 16 bits Nombre o tipo byte short Rango -27 ... 27-1 -215 ... 215-1 -232 ... 232-1 -264 ... 264-1

32 bits

int

64 bits

long

La representacin viene definida en complemento a dos y es independiente de la plataforma.

1. Una variable real se declara mediante la palabra clave float o double. 2. Un literal numrico es real si incluye un punto decimal, una parte de exponente (la letra E), o va seguido de la letra F o D.

real
float y double

3.14 6.02E23 2.718F 123.4E+306D

Un valor real Un valor real largo Un valor float Un valor double

Tamao y rango de los dos tipos real: Longitud 32 bits Nombre o Rango tipo real 1.7E-308 a 1.7E+308 3.4E-038 a 3.4E038

64 bits

double

3. Los literales reales son double a menos que se declaren explicitamente como float.

5 Variables, declaraciones y asignaciones


Una variable se declara mediante una sentencia como la siguiente:

tipo identificador_de_la_variable; Siendo tipo alguno de los tipos que hemos visto en el apartado anterior 1.d. identificador_de_la_variable debe ser un identificador vlido, de los que hemos visto en el apartado 1.b. En la sentencia de declaracin de variable tambin podemos realizar la asignacin de valor a la misma. Por lo que la sentencia ahora combina declaracin y expresin de asignacin:

tipo identificador_de_la_variable= valor; El valor tiene que ser un valor acorde con el tipo, tal y como hemos visto en el apartado anterior.

Si asignamos una variable entera, valor debe ser un valor


entero.

Si asignamos un char debemos introducir el valor entre


comillas simples. Si declaramos un String asignaremos el valor entre comillas dobles. Vemoslo con un ejemplo.

Prctica
Modifica el cdigo de clase Tema3 para probar que las sentencias de asignacin. Aade una sentencia System.out.println(identificador_de_variables) por cada variable de la que quieras ver su valor en la salida estndar:
public class Tema3 { public static void main (String args[]) { int x, y; // declara variables enteras float z = 3.414f; // declara y asigna valores reales double w = 3.1415; // declara y asigna double boolean truth = true; // declara y asigna boolean char c; // declara variable carcter String str; // declara variable String String str1 = "bye"; // declara y asigna String c = 'A'; // asignan valor a variable char str = "Hi out there!"; // asigna valor a variable String x = 6; y = 1000; // asigna valores a variables enteras System.out.println(x); } }

Despus de compilar, ejecutamos el mtodo main. Si queremos ver el contenido de ms variables solo tenemos que repetir la ltima sentencia cambiando el nombre de la variable que queramos visualizar.

6 Objetos
Hasta ahora hemos hablado de POO en una captulo entero y en varios apartados. En este subapartado vamos a explicar con ms detenimiento como reflejar una estructura de datos como una clase, y como construir a partir de esa definicin de clase un objeto. Mediante un simple ejemplo vamos a proceder con la explicacin. Si nos planteamos definir una clase que represente una fecha llegaremos a la conclusin de que necesitamos espacio para almacenar tres enteros que representen por separado el da, el ms y el ao. En Java lo representaremos del siguiente modo:

ejemplo
class Fecha { int dia; int mes; int anyo;
}

La palabra class es parte del lenguaje Java, y se debe escribir en minsculas. El nombre Fecha se escribe con la primera letra mayscula por convenio, ms que por requerimientos del lenguaje. La palabra class es parte del lenguaje Java, y se debe escribir en minsculas. El nombre Fecha se escribe con la primera letra mayscula por convenio, ms que por requerimientos del lenguaje.

Ahora podemos declarar una variable del tipo Fecha, y el da, mes y ao estarn implcitos en la declaracin:

Fecha miFecha,

tuFecha;

Utilizando esta declaracin, Java permite acceder a las partes de las variables (dia, mes y anyo) utilizando el operador punto (.):

miFecha.dia = 26; miFecha.mes = 11; tuFecha.anyo = 1960;

Cada uno de los elementos que constituyen la clase, esto

es el da, el mes y el ao en este caso, se les denominan variables miembro o simplemente miembro. Cuando declaramos variables de algn tipo fundamental, esto es boolean, byte, short, char, int, long, float o double, el espacio de memoria se asigna como parte de la operacin. La declaracin de una variable del tipo de una clase, tal como String o cualquier otro tipo definido por el usuario no lo hace.

Una variable declarada como tipo de una clase no es el

dato en s mismo, si no que es una referencia al dato. (...esto nos recuerda los punteros de C ...)

Antes de poder utilizar la variable debemos asignarle un espacio de almacenamiento. Esto se hace con new.

Fecha miFecha;

miFecha = new Fecha ();

La primera sentencia asigna el espacio justo para la

referencia. La segunda asigna el espacio para los tres enteros utilizados para formar la fecha.

El almacenamiento real, asignado con la llamada new Fecha() se denomina objeto. Vemoslo con un ejemplo.

Prctica
Modifica el cdigo de clase Tema3 para probar el siguiente cdigo. Aparecen 2 clases:

La primera es usada para crear el objeto miFecha de la

clase Fecha, asignarle valores a sus atributos e imprimir su contenido.

La segunda es la clase Fecha. Define tres atributos:

dia, mes y ao. Adems de los tres atributos, se ha definido, como parte de su comportamiento, un mtodo: toString().

public class Tema3 { public static void main (String args[]) { // Declaracin del objeto miFecha de la clase Fecha Fecha miFecha; // instanciacin o creacin del objeto: sentencia new() miFecha = new Fecha(); /* asignacin de valores a los atributos del objeto * utilizando la notacin punto. * / miFecha.dia = 5; miFecha.mes = 9; miFecha.anyo = 1973; System.out.println(miFecha); } } class Fecha { int dia; int mes; int anyo;

public String toString () { String salida = ""; // Aadir el da a la variable salida if (dia<10) salida += "0" + dia + "-"; else salida += dia + "-"; // Aadir el mes a la variable salida if (mes<10) salida += "0" + mes + "-"; else salida += mes + "-"; // Aadir el ao a la variable salida salida += anyo; return salida; } }

El mtodo toString() de la clase Fecha es invocado por el intrprete de Java siempre que usamos el mtodo System.out.print(Fecha). Esto es debido a que toda la salida del mtodo System.out.print es convertida a String. Si no hubieramos escrito ste mtodo tambin funcionara el programa, se invocara al mtodo toString() de la superclase de la clase Fecha, es decir, el mtodo toString() de la clase Object. Estudiaremos la sobreescritura de mtodos en el prximo captulo.

7 Asignacin de variables de referencia


Java trata las variables que se declaran del tipo de una clase como referencias. Vemoslo con un ejemplo:

int x = 7; int y = x; String s = "Hola"; String t = s;

Creamos 4 variables de tipo int y dos referencias a String. El valor de x es siete y su valor se copia en y. Ambas x e y son variables independientes y cambios posteriores a alguna de ellas no afectan a la otra. Con las variables s y t, el resultado no es el mismo. Slo existe un objeto String, el cual contiene el texto 'Hola'. Ambas s y t hacen referencia a este nico objeto. Si hacemos una nueva asignacin a s, t mantendr el valor anterior debido al comportamiento especial que tiene el operador asignacin (=) en la clase String. Vemos este comportamiento en un ejemplo.

Prctica
Modifica el cdigo de clase Tema3 para probar el siguiente cdigo. Hemos ampliado el cdigo anterior de la clase Fecha. Ahora presenta un mtodo Constructor que acepta los parmetros da, mes y ao al ser invocado con la sentencia new(). Esto nos permite asignar los valores de dia, mes y ao a la vez que es creado, y de paso verificar que los valores de la fecha sean correctos. En el ejemplo, creamos varias tipos de variables y su comportamiento tras la asignacin de valores es diferente:

Dos variables de tipos simples int: x e y. Cada una tiene

su propio espacio en memoria. Creamos tambin dos variables objeto de tipo String: s y t. Inicialmente apuntan al mismo valor, pero cuando cambiamos el contenido de una de ellas, automticamente se crea un nuevo espacio y cada una apunta a un valor diferente. Esto es debido al comportamiento especial que tiene el operador asignacin (=) en la clase String. Por ltimo creamos dos variables objeto de la clase Fecha. Aqu el operador asignacin no tiene un comportamiento especial. Para la primera variable de tipo Fecha, llamada miFecha, creamos espacio con new(int,int,int). Para la segunda, llamada tuFecha, no creamos espacio de manera que apunta directamente a miFecha. Al modificar el contenido de miFecha.mes estamos afectando al contenido de tuFecha.mes, pues ambas variables, miFecha y tuFecha, apuntan al mismo

espacio de memoria creado con new(int,int,int).

public class Tema3 { public static void main (String args[]) { int x = 7; // creacin y asignacin de x (x es 7) int y = x; // creacin y asignacin de y (y es 7) String s = "Hola"; // s es "Hola" String t = s; // t apunta a s // miFecha es un objeto nuevo que vale 5,9,1973 Fecha miFecha = new Fecha(5,9,1973); // tuFecha es de la clase Fecha y apunta a miFecha Fecha tuFecha = miFecha; System.out.println("x= " + x); System.out.println("y= " + y); System.out.println("s= " + s); System.out.println("t= " + t); System.out.println("miFecha= " + miFecha); System.out.println("tuFecha= " + tuFecha); x = 8; // cambia el valor de x, no de y s = "Adios"; // s apunta a un nuevo espacio de memoria miFecha.mes = 10; // miFecha cambia System.out.println("x= " + x); System.out.println("y= " + y); System.out.println("s= " + s); System.out.println("t= " + t); System.out.println("miFecha= " + miFecha); System.out.println("tuFecha= " + tuFecha); } } class Fecha { int dia; int mes; int anyo; public Fecha (int dd, int mm, int aa) { if (dd>=0 && dd<=31) { dia = dd; } else dia = 1; if (mm>=1 && mm<=12) { mes = mm; } else mes = 1; anyo = aa; } public String toString () { String salida = ""; // Aadir el da a la variable salida

if (dia<10) salida else salida += dia // Aadir el mes a if (mes<10) salida else salida += mes // Aadir el ao a salida += anyo; return salida; } }

+= "0" + dia + "-"; + "-"; la variable salida += "0" + mes + "-"; + "-"; la variable salida

Al ejecutar el mtodo main, como resultado obtendremos los valores iniciales asignados a las seis variables, y a continuacin los valores que tienen despus de las modificaciones parciales hechas a tres de las seis variables. La variable entera modificada cambia sin afectar a la otra. El objeto String s tambin cambia, crendose una nueva cadena, y sin afectar ese cambio a t. El objeto miFecha y tuFecha, que apuntan al mismo sitio, cambian su valor si modificamos su contenido, ya sea accediendo al contenido con miFecha o con tuFecha. Probar otras modificaciones, adems de las que aparecen, en el cdigo del mtodo main.

8 Iniciacin por defecto


Java es un lenguaje muy estricto con la inicializacin: No puede haber nada sin inicializar. Cuando ejecutemos new para asignar memoria para un objeto, Java inicializa los valores a cero, para variables numricas. Para variables boolean el valor establecido es 'false'. Para las referencias, esto es, cualquier variable del tipo de una Clase, se utiliza el valor especial null. En Java un valor nulo indica que la referencia no hace referencia a ningn objeto. Esto permite detectar en tiempo de ejecucin si se intenta utilizar una referencia de este tipo y detener su acceso inmediata, limpia e independientemente de la plataforma, sin permitir que ocurra ningn error. La inicializacin por defecto solo ocurre en variables miembro.

9 Variables y tiempo de vida


Hay dos formas de definir variables: 1. Mediante el uso de tipos simples, o 2. Empleando clases Hay adems dos lugares en los que se pueden definir: 1. Dentro de un mtodo (automtica) 2. Dentro de la definicin de una clase (miembro) Las variables definidas dentro de un mtodo, se les denomina variables automticas, locales, temporales, o pila. Las variables miembro se crean cuando se construye un objeto utilizando la llamada new Xxxx() y continan existiendo mientras se necesite el objeto. Las variables automticas se crean cuando comienza el mtodo o bloque donde estn definidas y se destruyen cuando finaliza.

Prctica
Esta vez, para ilustrar las diferencias entre variables automticas y variables miembro vamos a emplear dos clases separadas en dos ficheros diferentes. El esquema de la aplicacin va a ser el mismo que hasta ahora (en el que hemos usado la clase Tema3 y la clase Fecha). La diferencia es que vamos a usar ficheros separados para cada una de las clases. As, primero creamos una nueva clase. Le damos el nombre Fecha y escribimos el cdigo de la clase Fecha, que aparece a continuacin.

public class Fecha { int dia; int mes; int anyo; public Fecha () { dia = 1; mes = 1; anyo = 1970; } public Fecha (int dd, int mm, int aa) { // Validar y asignar el da if (dd>=1 && dd<=31) dia=dd; else dia=1; // Validar y asignar el mes if (mm>=1 && mm<=12) mes=mm; else mes=1; anyo=aa; } public String toString () { String salida = ""; if (dia<10) salida += "0" + dia + "-";else salida += dia + "-"; if (mes<10) salida += "0" + mes + "-";else salida += mes + "-"; salida += anyo; return salida; } }

Despus de crear la clase Fecha, compilamos sin errores. A continuacin modificamos la clase Tema3 donde vamos a escribir el siguiente cdigo Java:

public class Tema3 { public static void main (String args []){ Fecha miFecha = new Fecha(5,9,1973); System.out.println(miFecha); } }

Igual que compilamos la clase Fecha sin errores, compilamos ahora la clase Tema3 sin errores. Analizando el cdigo correspondiente a la clase Fecha, vemos dos tipos de variables. Las variables miembro son las variables enteras dia, mes y anyo, definidas al comienzo de la clase. Dichas variables solo existirn dentro de cada objeto Fecha que creemos. As, en la clase Tema3 creamos un objeto llamado miFecha, de la clase Fecha. En el momento en el que se ejecuta la sentencia new se aloca espacio para las variables miembro del objeto miFecha, es decir, para dia, mes y anyo. Si ejecutamos el mtodo System.out.println(miFecha) se invoca al mtodo toString, que a su vez crea el objeto salida de la clase String. El objeto salida solo existe mientras se ejecuta el mtodo toString(). En el momento en el que el mtodo cesa su actividad, la variable desaparece; es una variable local al mtodo. En cambio, las variables miembro dia, mes y anyo existirn, asociadas al objeto miFecha, mientras se est ejecutando el mtodo main de la clase Tema3.Podemos ver en mayor detalle el ciclo de vida de una variable automtica aadiendo un bloque al mtodo toString de manera que quede como sigue:

public String toString () { String salida = ""; if (dia<10) salida += "0" + dia + "-"; else salida += dia + "-"; if (mes<10) salida += "0" + mes + "-"; else salida += mes + "-"; salida += anyo; { String cadena = "Fecha: "; } return cadena + salida; }

El cdigo que hemos aadido no compila. Crea un objeto de tipo String (variable automtica) llamada cadena. El cdigo no funciona porque la variable solo existe en el bloque de cdigo donde se ha creado.

Cuando finaliza el bloque de cdigo, la variable desaparece. De modo que no existe en el momento de ejecutar la sentencia return y el compilador de Java detecta el error.Si modificamos el cdigo as:

public String toString () { String salida = ""; if (dia<10) salida += "0" + dia +"-"; else salida += dia + "-"; if (mes<10) salida += "0" + mes +"-"; else salida += mes + "-"; salida += anyo; String cadena; { cadena = "Fecha:"; } return cadena + salida; }

de cadena y salida corresponde con el tiempo de ejecucin del mtodo toString() por lo que despus de ejecutarse el mtodo (y la sentencia return) las dos variables desaparecern.

10 Inicializacin de variables
En Java no es posible tener una variable sin un valor definido. Cuando se crea un objeto, las variables miembro se inicializan con los siguientes valores:
byte short int long float double char boolean Todos los tipos de referencia 0 0 0 0L 0.0f 0.0d '\u0000' (NULL) false null

Una referencia que tiene el valor null no se refiere a El intento de usar el objeto que referencia causar una

ningn objeto.

excepcin. Las excepciones son errores que ocurren en tiempo de ejecucin. Las variables automticas se deben inicializar antes de usarse. En caso contrario el compilador generar un error, por ejemplo, en la siguiente situacin: Int x = (int) (Math.random() * 100); int y; int z; if (x > 50) y = 9; z = y + x; // Posible uso antes de inicializacin El error que puede dar el cdigo anterior se produce porque no existe una inicializacin implcita de la variable automtica y en el cdigo. Solo recibe una inicializacin implcita como resultado de la evaluacin de una condicin, pero no es suficiente. La variable automtica debe tener una inicializacin implcita.

Das könnte Ihnen auch gefallen