jueves, 17 de julio de 2008

Capítulo 1. Aspectos básicos de Java (y VI)

1.8. La sintaxis del lenguaje Java


Tras el análisis de los fundamentos de la tecnología Java y las herramientas para la construcción de programas, vamos a comenzar el estudio de la sintaxis del lenguaje.

1.8.1. Elementos del lenguaje

De momento en este capítulo vamos a conocer los elementos básicos del lenguaje Java.

1.8.1.1. Caracteres especiales y signos de puntuación

Este grupo de caracteres se utiliza de diferentes formas; por ejemplo, para indicar que un identificador es una función o una matriz; para especificar una determinada operación aritmética, lógica o de relación, etc. Son los siguientes:

, . ; : ? ‘ “ ( ) [ ] { } < !
/ \ ~ + % & ^ * - = >

1.8.1.2. Secuencias de escape

Una secuencia de escape está formada por el carácter \ seguido de una letra o de una combinación de dígitos. Son utilizadas para acciones como nueva línea, tabular y para hacer referencia a caracteres no imprimibles.

Veamos las secuencias de escape que Java tiene predefinidas:





1.8.1.3. Tipos de datos

Para poder realizar cualquier tipo de operación con los datos es obligatorio indicar siempre el tipo de los mismos. Para ello escribiremos una sentencia de la siguiente forma:

int dato;

La declaración anterior le dice al compilador de Java que dato es de tipo entero (int).

Por un lado tenemos los tipos primitivos. Son ocho, que los podemos clasificar en tipos numéricos y el tipo boolean. A su vez los tipos numéricos se clasifican en tipos enteros y en tipos reales. Los tipos enteros son byte, short, int, long y char. Los tipos reales son float y double.

Cada tipo primitivo tiene un rango diferente de valores positivos y negativos, excepto el boolean que sólo tiene dos valores: true y false. El tipo de datos que se seleccione para declarar las variables de un determinado programa dependerá del rango y tipo de valores que se vayan a almacenar en cada una de ellas.

Estos son los únicos elementos en Java que no son objetos. Están integrados en el sistema para que su uso sea más eficiente. Java proporciona una serie de clases para dar una funcionalidad añadida a cada uno de estos tipos primitivos, conocidas como clases de envoltorio. Son las clases Byte, Character, Short, Integer, Long, Float, Double y Boolean.

Los tipos byte, short, int y long se usan para declarar valores de tipo entero. Cada uno permite un mayor número de valores posibles dependiendo de la memoria que ocupan. El tipo char se usa para representar caracteres. Un carácter es representado internamente por un número entero con tamaño de 2 bytes. El tipo float se utiliza para declarar valores en coma flotante de 32 bits en el formato IEEE 754 (este formato utiliza 1 bit para el signo, 8 bits para el exponente y 23 para la mantisa). Por último el tipo double se utiliza para declarar un dato en coma flotante de 64 bits en el formato IEEE 754 (1 bit para el signo, 11 bits para el exponente y 52 para la mantisa).

Por otro lado tenemos los tipos referenciados o tipos objeto. En este grupo están incluidas las clases, las interfaces y los arrays. Por ejemplo la clase String es un tipo referenciado.


1.8.1.4. Literales

Un literal es la expresión de un valor de un tipo primitivo, de un tipo String (cadena de caracteres) o la expresión null (valor nulo o desconocido). Un literal en Java puede ser un entero, un real, un valor booleano, un carácter, una cadena de caracteres y un valor nulo.

Los literales enteros se pueden especificar en Java en base 10 (decimal), 8 (octal) y 16 (hexadecimal). Un literal entero es de tipo int a no ser que se especifique lo contrario usando el sufijo l o L para indicar que es del tipo long.

Un literal entero decimal puede tener uno o más dígitos del 0 al 9, de los cuales el primero tiene que ser distinto de 0. Por ejemplo:

4326 es una constante entera de tipo int

4236L es una constante entera de tipo long


Un literal entero octal puede tener uno o más dígitos del 0 al 7, precedidos por un 0. Por ejemplo:

0326 es una constante entera de tipo int en base 8


Un literal entero hexadecimal puede tener uno o más dígitos del 0 al 9 y letras de la A a la F (en mayúsculas o minúsculas) precedidos por 0x o 0X. Por ejemplo:

256: número entero 256 expresado en decimal
0400: número entero 256 expresado en octal
0x100: número entero 256 expresado en hexadecimal
-0400: número entero -256 expresado en octal
-0x100: número entero -256 expresado en hexadecimal

Los literales reales están formados por una parte entera, seguido de un punto decimal y una parte fraccionaria. También se permite la notación científica, en cuyo caso se añade al valor una e o E, seguida por un exponente positivo o negativo. Una constante real tiene siempre tipo double a no ser que se añada el sufijo f o F para especificar que es de tipo float. También se puede usar el sufijo d o D para indicar explícitamente que es de tipo double.

-19.27: número real de tipo double
19.27008: número real de tipo double
.00258: número real de tipo double
27E-8: número real de tipo double
-19.27F: número real de tipo float
-19.27D: número real de tipo double

Los literales de un solo carácter están formados por un único carácter encerrado entre comillas simples. Una secuencia de escape se considera un único carácter.

‘ ‘: espacio en blanco
‘c’: letra minúscula c
‘\n’: retorno de carro más avance de línea
‘\u0007’: pitido
‘\u001B’: carácter ASCII Esc

Un literal de cadena de caracteres es una secuencia de caracteres encerrados entre comillas dobles (incluidas las secuencias de escape como \”).

“Esto es una constante de caracteres”
“3.1415926”
“” // cadena vacía
“Lenguaje \”Java\”” // produce: Lenguaje “Java”

Las cadenas de caracteres en Java son objetos de la clase String. Cada vez que en un programa se utilice un literal de cadena de caracteres, Java crea de forma automática un objeto String con el valor del literal. Las cadenas de caracteres se pueden unir o concatenar empleando el operador +. El siguiente ejemplo une la cadenas "bienvenido a " con "Java" y muestra el resultado en la consola:

System.out.println ("bienvenido a "+"Java");


1.8.1.5. Identificadores

Los identificadores son nombres dados a los distintos elementos que forman un programa. Un identificador consta de uno o más caracteres. El primer carácter debe ser una letra, el carácter de subrayado o el carácter dólar. Lo que significa que un identificador no puede comenzar por un dígito ni puede contener caracteres especiales.

Las letras pueden ser mayúsculas o minúsculas. Para Java una letra mayúscula es un carácter diferente a esa misma letra en minúscula.

1.8.1.6. Palabras reservadas

Las palabras reservadas son identificadores predefinidos en Java que tienen un significado especial para el compilador. Estas palabras reservadas no se pueden usar como identificadores definidos por el usuario. Estas son las siguientes palabras reservadas:


Las palabras reservadas se escriben siempre en minúsculas.

1.8.1.7. Comentarios

Un comentario es un mensaje a cualquiera que lea el código fuente. Añadiendo comentarios se hace más fácil la comprensión de un programa. La finalidad de los comentarios es explicar el código fuente. El compilador no los usa para nada. En Java existen tres tipos de comentarios:

  • Comentario de una sola línea. Este tipo de comentario comienza con una doble barra (//) y se extiende hasta el final de la línea. Por ejemplo:
// Esto es un comentario de una sola línea

  • Comentario multilínea. Este tipo de comentario comienza con los caracteres /* y se extiende hasta que se encuentran los caracteres */. Pueden ocupar varias líneas, pero no pueden anidarse.
/*
Esto es un comentario multilínea. Empieza en la
línea anterior y puede ocupar más de una línea
*/

  • Comentario de documentación. Este tipo de comentario empieza con los caracteres /** y termina con */. Son unos comentarios especiales que son usados por una utilidad llamada javadoc que permite generar la documentación acerca del programa, aunque también se pueden usar de manera idéntica a los comentarios multilínea.
/**
Comentario multilínea o para que la utilidad javadoc
genere la documentación del programa
*/

1.8.1.8. Variables

Una variable representa un espacio de memoria para almacenar un valor de un determinado tipo. El valor de una variable puede cambiar durante la ejecución de un programa. Para usar una variable en un programa, primero hay que declararla. La declaración de una variable consiste en enunciar el nombre de la misma y asociarle un tipo determinado.



tipo nombre_variable;



Se pueden declarar varias variables del mismo tipo a la vez indicando el tipo y separando los nombres de las variables con comas.



tipo variable1, variable2;



El tipo de la variable, ya sea primitivo o referenciado, determina los valores que puede tomar así como las operaciones que se pueden realizar.



int numero;
String nombre, apellidos;



Las variables declaradas dentro de un bloque, delimitado por los caracteres { y }, sólo son accesibles directamente en ese bloque o en otros bloques anidados.

Una vez que se ha declarado una variable el siguiente paso es inicializarlas. Cuando una variable se declara directamente en el bloque correspondiente al cuerpo de la clase, se inicializa con un valor por defecto. En el caso de tipos numéricos el valor por defecto es el 0, mientras que para los tipos referenciados el valor por defecto es null. También pueden ser inicializadas explícitamente escribiendo el signo = y el valor deseado justo después del nombre de la variable. Una variable declarada en el interior del cuerpo de la clase, pero fuera de los métodos, se llama variable miembro de la clase (atributo de la clase). En caso de que una variable sea declarada en el interior de un método siempre debemos inicializarla explícitamente. Estas variables se denominan variables locales. Se puede realizar la inicialización junto con la declaración o como dos pasos independientes.



String nombre = “Ruth”; // declaramos e inicializamos
                        // la variable
int i, j = 19; // declaramos i y declaramos e
               // inicializamos j
i = 8; // inicializamos i que estaba declarada
       // anteriormente



1.8.1.9. Constantes

Declarar una constante permite indicarle al compilador el nombre que va a tener un determinado valor fijo. Para hacerlo debemos usar las palabras reservadas final y static anteponiéndolas al tipo y nombre de la constante. Además debemos inicializar la constante con el valor deseado.

Cuando usamos la palabra reservada final estamos indicando que el elemento que estamos declarando no se va a poder modificar durante la ejecución del programa.

final double PI = 3.14;



A la hora de declarar una constante pueden darse dos casos, que la constante se declare en el bloque correspondiente a la clase o dentro de un método. Cuando se declara en el bloque correspondiente a la clase se puede usar además del calificador final el calificador static. Cuando se usa static sólo existirá una copia de la constante para todos los objetos que se declaren de esa clase. Si no se especifica static, cada objeto incluirá su propia copia de la constante, cosa que no parece muy lógica ya que se trata del mismo valor constante. En el segundo caso no se puede usar static. La constante sólo es visible dentro del método y sólo existe durante la ejecución del mismo.



La palabra reservada static también puede usarse para variables, creando lo que se denomina variable de clase, que será compartida por todos los objetos que se creen de la clase. En posteriores temas se abordará con detenimiento el estudio de este modificador.

1.8.1.10. Expresiones numéricas

Una expresión es un conjunto de operandos unidos mediante operadores para especificar una operación determinada. Todas las expresiones retornan un valor cuando son evaluadas.



a + 1
suma + c
cantidad * precio
7 * Math.sqrt(a) – b / 2



1.8.1.11. Conversión de tipos

Cuando Java tiene que evaluar una expresión en la que aparecen operandos de distintos tipos, lo primero que tiene que hacer es convertiros, sólo para realizar las operaciones solicitadas, al tipo del operando que tenga mayor precisión. Cuando se trata de una asignación lo que ocurre es que se convierte el valor de la derecha del igual al tipo de la variable de la izquierda siempre que no haya pérdida de información en la conversión. En otro caso Java exige que la conversión se realice explícitamente. El siguiente equema muestra los tipos primitivos colocados de menos precisos a más precisos:

  • byte
  • short y char
  • int
  • long
  • float
  • double

Java permite una conversión explícita (conversión forzada) del tipo de una expresión mediante una construcción denominada cast, que tiene la forma:



(tipo) expresión



Cualquier valor de un tipo entero o real puede ser convertido a o desde cualquier tipo numérico. No se pueden realizar conversiones entre los tipos enteros o reales y el tipo boolean.



float f = 0;
double d = 2;
f = (float)d; // se hace un cast ya que se
              // puede perder precisión



1.8.1.12. Operadores

Los operadores son símbolos que indican cómo son manipulados los datos. Se pueden clasificar en los siguientes grupos:



  • Aritméticos
  • Relacionales
  • Lógicos
  • Unarios
  • A nivel de bits
  • De asignación
  • Operador condicional


Los operadores aritméticos son los siguientes:

+ - * / %







 



Este capítulo forma parte del Máster de Java-J2EE-XML-AJAX del Grupo SYNCROM.
Más información en
www.syncrom.com o en el Microsite del Máster OnLine de Java-J2EE


No hay comentarios: