JAVA



3.1 CARACTERÍSTICAS DEL LENGUAJE DE PROGRAMACIÓN JAVA

Este lenguaje de programación creado por Sun Microsystems a mediados de la década de los 90 es el lenguaje de programación más popular en la actualidad. Así lo demuestra el índice TIOBE.
El índice TIOBE trata de reflejar el "estado de salud" de los distintos lenguajes de programación. El índice reparte 100 puntos entre todos los lenguajes de programación existentes.

Java lidera dicho índice; y lo lleva liderando desde principios del 2001; otro de los méritos que puede atribuirse es el liderar el ranking de Sourceforge de número de proyectos desarrollados en un determinado lenguaje. En abril del 2005 superó al actual tercer lenguaje de programación, C, y en noviembre del 2005 superó al actual segundo, C++.

La plataforma se divide en tres grandes bloques. Uno de ellos, Java SE es lo más parecido a un lenguaje de programación estándar. Proporciona una sintaxis para un lenguaje de programación, un entorno de ejecución para las aplicaciones creadas en dicho lenguaje y un extenso conjunto de librerías en las cuales se pueden apoyar dichas aplicaciones.

Java ME  es una edición de Java orientada a programación de dispositivos móviles y empotrados. En esta categoría encajan desde las tarjetas inteligentes (como las que se emplean en los DNI electrónicos, en las tarjetas prepago o en las SIM de los teléfonos celulares) hasta terminales móviles de última generación, pasando por los reproductores del formato de video de alta definición BlueRay, o software de control de coches. Java ME proporciona un subconjunto de las librerías y de las características del lenguaje de Java SE.

Este subconjunto puede variar dependiendo de para qué dispositivos estemos programando; si estamos programando para terminales móviles de última generación están disponibles prácticamente todas las características de Java SE. Sin embargo, si estamos programando para tarjetas inteligentes el conjunto de librerías está considerablemente reducido, y el lenguaje de programación soporta menos características; por ejemplo, no soporta tipos de datos reales ya que estos dispositivos sólo tienen hardware para realizar aritmética de enteros.
Java ME es muy popular en la actualidad en dispositivos móviles, aunque a menudo pase desapercibido. Para darse una idea de la presencia de esta tecnología, basta mencionar que se han manufacturado 3.500.000.000 de tarjetas inteligentes basadas en la tecnología Java, y más de 1.400.000.000 de teléfonos celulares con soporte para aplicaciones Java ME.

Si Java ME puede considerarse como un subconjunto de Java SE, Java EE
 puede considerarse como un superconjunto. En este caso, no se extiende ni se modifica de ningún modo el lenguaje de programación. Se añade un conjunto amplio de librerías y una serie de contenedores de aplicaciones (contenedores web y de EJB). Estos contenedores proporcionan
servicios, de un modo automático y transparente para el programador, a las aplicaciones que contienen, servicios como transaccionalidad, persistencia, autenticación, autorización, etcétera.
Nuevamente, muchas de las web que visitamos diariamente están hechas en Java: el propio GMail es un ejemplo.

CARACTERÍSTICAS DE JAVA

  • Se dice que Java es un lenguaje sencillo de aprender (para mí no lo es tanto).
  • Java es completamente independiente de la máquina y el sistema operativo en el que se ejecuta. El código generado por el compilador Java es independiente de la arquitectura: podría ejecutarse en un entorno UNIX, Mac o Windows; en un procesador Sparc, x86, PowerPC, ARM, ... tanto de 32 como de 64 bits. El motivo de esto es que realmente ejecuta el código generado por el compilador mediante una máquina virtual.
  • Java es portable a nivel de código fuente.
  • Java es un lenguaje de programación robusto y seguro. Estas características surgen en buena medida de ser un lenguaje que no es ejecutado directamente por la CPU, sino que es ejecutado por la máquina virtual. Esta máquina virtual puede controlar los permisos que se le otorgan a una determinada aplicación y garantizar que dichos permisos no son violados.
  • Java proporciona soporte para la creación de Applets. Estos son programas diseñados para ser ejecutados de modo automático cuando un usuario visita una página web.
  • Java es un lenguaje de alto rendimiento. Esto es así gracias al uso de compiladores just in time, compiladores que traducen los bytecodes de Java en código máquina para una determinada CPU, código que no precisa de la máquina virtual para ser ejecutado, y guardan el resultado de dicha conversión, volviéndolo a llamar en caso de volverlo a necesitar, con lo que se evita la sobrecarga de trabajo asociada a la interpretación del bytecode.
No obstante, por norma general el programa Java consume bastante más memoria, ya que no sólo ha de cargar en memoria los recursos necesarios para la ejecución del programa, sino que además debe simular un sistema operativo y hardware virtuales (la máquina virtual). Sin embargo, dado el bajo precio de la memoria RAM en la actualidad y la gran cantidad de memoria que suele haber disponible, el mayor consumo de memoria a menudo es irrelevante.

COMO SE UTILIZA EL KIT DE DESARROLLO JAVA, JDK

Para desarrollar aplicaciones Java es necesario un "Java Development Kit" o JDK que distribuye  Sun Microsystems, que se puede descargar gratuitamente desde:


http://java.sun.com
 

La portabilidad del lenguaje garantiza que todos funcionarán del mismo modo.
Es bien sabido que el entorno JDK no es el más adecuado para el desarrollo de aplicaciones Java, debido a funcionar única y exclusivamente mediante comandos.
Hoy en día la programación se suele ayudar de entornos visuales, como Eclipse y Netbeans, que facilitan enormemente la tarea. En nuestro curso estamos manejando Netbeans que pueden descargarse desde:

 
http://netbeans.org

En algunos libros recomiendan en un principio no utilizar el entorno IDE (Netbeans, en nuestro caso) para familiarizarse con el JDK.
Una vez instalado en  nuestro equipo se podrá ejecutar aplicaciones Java. Sin embargo, es necesario salir primero al símbolo del sistema y entrar a la carpeta Bin que se encuentra en la siguiente ruta:

C:\Archivos de programa\Java\Jdk1.7.0\Bin


Al frente de toda esta ruta escribimos lo siguiente:

C:\Archivos de programa\Java\Jdk1.7.0\Bin> notepad Ejemplo_1
Esto nos creará un nuevo archivo en el block de notas

Este primer programa que lo utilizan en todas las explicaciones sobre java, nos da una idea de lo que hace el jdk para compilar y correr el programa, al no tener conocimientos previos sobre este lenguaje, al principio parece muy abstracto, pero copiemos tal cual aparece y después al leer los elementos de este lenguaje y sus características, nos será más fácil entenderle, (al menos así sucedió conmigo).

//**Programa "hola mundo"
public class HolaMundo
{
        public static void main(String[] args)
        {
        //La siguiente instrucción imprime en la pantalla lo que se encuentre encerrado entre         comillas
        System.out.println("Hola Mundo estamos aprendiendo JAVA");
         }
}

Cuando terminamos de escribirlo es muy importante guardarlo con el nombre HolaMundo.java, que es el mismo nombre que aparece al final de la instrucción public class.
A cada línea se le llama sentencia y todas las sentencias que inician con // son comentarios y, por tanto, serán ignorados por el compilador.

La línea public static void main(String[] args) define el main, el punto de entrada, del programa.
System.out.println es una sentencia que permite imprimir por la pantalla el texto que se se escribe entre paréntesis, rodeado de comillas.

Para compilar nuestro programa necesitamos escribir lo siguiente

C:\Archivos de programa\Java\Jdk1.7.0\Bin> javac  Ejemplo_1.java
Si no encuentra errores, se termina de compilar el programa, y para verlo funcionar (correrlo), ahora escribimos lo siguiente:

C:\Archivos de programa\Java\Jdk1.7.0\Bin> java  Ejemplo_1

Los archivos .class contienen bytecode, una especie de "ensamblador" de la plataforma Java. Estos archivos se generan después de compilar al programa. Si buscamos en el directorio donde acabamos de crearlos tenemos dos archivos con el nombre de Ejemplo_1, uno con la extensión java y otro con extensión class.

ELEMENTOS DEL LENGUAJE

DATO

 
Es la representación formal de hechos, conceptos o instrucciones adecuada para su interpretación y procesamiento.


TIPO DE DATO
•    Constantes
•    Variables
Especificación de un dominio (rango de valores) y de un conjunto válido de operaciones a los que los compiladores y traductores asocian un esquema de representación interna propia.
Los datos que recibe un programa pueden ser constantes o variables, las constantes se definen con un valor dentro del programa y no pueden cambiar dicho valor; las variables van tomando valores a través de dispositivos de entrada (el teclado por ejemplo) o de valores que se van calculando dentro de un programa.

CLASIFICACIÓN DE LOS TIPOS DE DATO
a.    En función de quien los define:

  • Tipos de datos estándar
  • Tipos de datos definidos por el usuario
b.    En función de su representación interna:
  • Tipos de datos escalares o simples
  • Tipos de datos estructurados 
TIPOS DE DATOS PRIMITIVOS EN JAVA
  • Java maneja 8 tipos de datos:


   Datos de tipo númerico:

  • Numéricos enteros            byte    short    int    long
  • Numéricos en coma flotante        float    double
 ENTEROS
Almacenan, como su propio nombre indica, números enteros; esto es, números sin parte decimal. En Java hay cuatro tipos de enteros, como se muestra a continuación. Esta tabla también nos muestra el rango (valores mínimos y máximos) de cada tipo y el espacio que ocupan en memoria, medido en bytes.



Para indicar que un literal entero es de tipo long debemos añadirle una L al final: el número 23 es un int y el número 23L es un long.
Es importante que en el momento de definir los tipos de datos dentro de la edición del programa, se escriban con minúsculas los tipos de dato.
.
REALES
Almacenan números reales, es decir, números con parte decimal. Como se muestra en la tabla 2, hay dos tipos diferentes de número real; se diferencian tanto en la precisión (el número de cifras decimales que son capaces de representar) como en el rango de valores que permiten representar.
Datos reales en Java

  


Si queremos indicar que un literal o constante  real es de tipo float debemos añadir una F después de él: 2.3F, sino por defecto será double.

DATOS DE TIPO CARÁCTER

Java está codificado en un formato denominado Unicode. Unicode es una extensión de ASCII, ya que éste último sólo tenía capacidad para representar 256 símbolos distintos. Para poder representar todos los alfabetos (chino, japonés, ruso...) y una mayor cantidad de símbolos se creó el formato Unicode.
Se les llama cadena de caracteres a los conjuntos de varias letras por ejemplo el “Hola Mundo” del primer ejemplo es una cadena de caracteres, y se le llama carácter a cada una de las letras.
En java podemos tener constantes o variables de tipo char, que almacenan una sola letra.
Los char van entre comillas simples: char ch = ‘R’

Mientras que las cadenas de caracteres usan comillas dobles.

DATOS LÓGICOS: BOOLEAN
Se trata de un tipo de dato que solo puede tomar dos valores: true y false

Es decir  representan los valores lógicos cierto y falso, respectivamente. Por ejemplo, la sentencia:
bolean b = true;
inicia la variable b con el valor lógico que representa una condición que se cumple, esto es, una condición cierta. Es un tipo de dato útil a la hora de realizar chequeos sobre condiciones.

DEFINICIÓN DE VARIABLES
Java requiere que se declaren los tipos de todas las variables empleadas.
Se requiere inicializar todas las variables antes de usarlas, si no el compilador genera un error y aborta la compilación. Se puede declarar e inicializar valor a una variable en una misma línea:
int i = 0;
En Java, después de cada línea de código siempre debe ir un ";".
Declaración e inicialización pueden hacerse en líneas diferentes:
int i ;
i = 0;
Es posible declarar e iniciar varias variables en una línea:
int i=3, j,k=2;
Los caracteres aceptados en el nombre de una variable son los comprendidos entre AZ, az
, _, $ y cualquier carácter que sea una letra en algún idioma. En Java, al igual que en todo lenguaje depr ogramación, hay una serie de palabras reservadas que no pueden ser empleadas como nombres de variables ( if, int, char, else, goto...); alguna de éstas son empleadas en la sintaxis del lenguaje.

REGLAS DE CONVERSIÓN ENTRE DISTINTOS TIPOS NUMÉRICOS
Las normas de conversión entre tipos numéricos son las habituales en un lenguaje de programación: si en una operación se involucran varios datos numéricos de distintos tipos todos ellos se convierten al tipo de dato que permite una mayor precisión y rango de representación numérica; así, por ejemplo:
•    Si cualquier operando es double todos se convertirán en double
•    Si cualquier operando es float y no hay ningún doublé todos se convertirán a float
•    Si cualquier operando es long y no hay datos reales todos se convertirán en long
•    Si cualquier operando es int y no hay datos reales ni long todos se convertirán en int
•    En cualquier otro caso el resultado será también un int
.
Java sólo tiene dos tipos de operadores para operar números enteros: uno que aplica para operar datos de tipo long, y otro que emplea para operar datos de tipo int (esto también sucede con la mayor parte de las CPU actuales). De este modo cuando operemos un byte con un byte
, un short con un short o un short con un byte Java empleará para dicha operación el operador de los datos tipo int, por lo que el resultado de dicha operación será un int siempre.
Estas conversiones son importantes a la hora de determinar en qué tipo de variable guardamos el resultado de la operación; ésta ha de tener un rango de representación mayor o igual al rango de representación de la variable con mayor rango de representación involucrada en la operación. Si es de rango superior no habrá problemas. Si no respetamos esta regla, el compilador generará un error.

Es posible convertir un dato de jerarquía “superior” a uno con jerarquía “inferior”, arriesgándonos a perder información en el cambio. Este tipo de operación (almacenar el contenido de una variable de jerarquía superior en una de jerarquía inferior) se denomina cast o molde. Para llevar a cabo un cast debemos poner delante de la variable cuyo tipo queremos cambiar, entre paréntesis, el tipo de la variable al cual queremos realizar el cambio.

En Java cuando "se suma" un valor numérico a una cadena de caracteres lo que sucede es que se crea una nueva cadena de caracteres igual a la cadena de caracteres original concatenada con el valor; es decir:
"Edad: "+ 23   da como resultado "Edad: 23"
Operadores

En esta parte veremos los operadores aritméticos, relacionales y lógicos con los que cuenta Java.
Operadores aritméticos
Los operadores aritméticos de Java son:




 



El módulo de la división de dos enteros puede obtenerse mediante el operador %. Por ejemplo, 7/4= 1; 7% 4=3
.
Además, existen los operadores decremento e incremento:
 

-- Decremento
++ Incremento


 La operación que realizan son incrementar y decrementar en una unidad a la variable a la que se aplican. Su acción es distinta según se apliquen antes (preincremento, ++a) o después (postincremento a++) de la variable. En el caso del operador preincremento, si la variable sobre la que se aplica forma parte de una expresión primero se incrementará el valor de la variable, y a continuación se evaluará la expresión. En el caso del operador postincremento, si la variable sobre la que se aplica forma parte de una expresión, primero se evaluará la expresión y a continuación se incrementará el valor de la variable.

Operadores relacionales

Los operadores relacionales son operadores que comprueban si se cumple una determinada relación, de igualdad, desigualdad, mayor que... entre dos valores numéricos. El resultado de la aplicación de cualquier operador relacional es siempre un boolean, es decir, la expresión que surge de comparar dos variables o literales mediante un operador relacional sólo puede tomar dos valores: true y false.
       
    




Operadores lógicos
Estos operadores se aplican sobre valores lógicos, es decir, sobre datos de tipo
boolean. En Java hay tres operadores lógicos: la negación, el AND (Y) lógico y el OR (O) lógico.