JAVA
top of page

JAVA



Java es un lenguaje de programación de alto nivel desarrollado por Sun Microsystems en la década de 1990. Es un lenguaje orientado a objetos, lo que significa que todo en Java es un objeto. Java es un lenguaje de programación muy popular y se utiliza ampliamente para desarrollar aplicaciones web, aplicaciones móviles y juegos.


Java es un lenguaje de programación muy versátil y se puede utilizar en una amplia variedad de plataformas, incluyendo Windows, Mac OS X, Linux y Android. Una de las principales ventajas de Java es que es un lenguaje de programación independiente de la plataforma, lo que significa que el código Java se puede ejecutar en cualquier plataforma que tenga una máquina virtual de Java instalada.


Variables y tipos de datos JAVA

En Java, las variables son espacios de memoria reservados para almacenar datos. Cada variable tiene un tipo de datos que define qué tipo de datos puede contener. Los tipos de datos más comunes en Java son:

  1. Tipos de datos primitivos:

  • int: enteros de 32 bits.

  • double: números decimales de doble precisión de 64 bits.

  • boolean: valores booleanos (verdadero o falso).

  • char: caracteres Unicode de 16 bits.

  • byte: enteros de 8 bits.

  • short: enteros de 16 bits.

  • long: enteros de 64 bits.

  • float: números decimales de precisión simple de 32 bits.

  1. Tipos de datos de referencia:

  • String: cadenas de texto.

  • Object: todos los objetos en Java heredan de esta clase.

  • Arrays: colecciones de elementos del mismo tipo.

Para declarar una variable en Java, se utiliza la sintaxis:

javaCopy code
tipoDeDato nombreDeVariable = valorInicial;

Por ejemplo:

arduinoCopy code
int edad = 30;
double precio = 10.50;
boolean esCierto = true;
String nombre = "Juan";
int[] numeros = {1, 2, 3, 4, 5};

Se declararon variables de diferentes tipos de datos y se les asignaron valores iniciales.


Operadores y expresiones


En Java, los operadores son símbolos especiales que se utilizan para realizar operaciones matemáticas, lógicas y de comparación en expresiones. Las expresiones son combinaciones de valores, variables y operadores que se utilizan para realizar cálculos y tomar decisiones en un programa.

Algunos de los operadores más comunes en Java son:


Operadores aritméticos:

  • Suma (+): suma dos valores.

  • Resta (-): resta dos valores.

  • Multiplicación (*): multiplica dos valores.

  • División (/): divide dos valores.

  • Módulo (%): devuelve el resto de la división entre dos valores.

  • Incremento (++): aumenta el valor de una variable en 1.

  • Decremento (--): disminuye el valor de una variable en 1.

Operadores de asignación:

  • Asignación (=): asigna un valor a una variable.

  • Asignación compuesta (+=, -=, *=, /=, %=): realiza una operación y asigna el resultado a una variable.

Operadores de comparación:

  • Igualdad (==): devuelve verdadero si dos valores son iguales.

  • Desigualdad (!=): devuelve verdadero si dos valores son diferentes.

  • Mayor que (>), menor que (<): devuelven verdadero si un valor es mayor o menor que otro.

  • Mayor o igual que (>=), menor o igual que (<=): devuelven verdadero si un valor es mayor o igual o menor o igual que otro.

Operadores lógicos:

  • AND lógico (&&): devuelve verdadero si ambas expresiones son verdaderas.

  • OR lógico (||): devuelve verdadero si al menos una expresión es verdadera.

  • NOT lógico (!): invierte el valor de una expresión.

Las expresiones en Java se construyen utilizando variables, valores literales y operadores. Por ejemplo:

arduinoCopy code
int x = 10;
int y = 5;
int z = x + y; // la expresión suma el valor de x e y y lo asigna a zboolean esMayor = x > y; // la expresión compara si x es mayor que y y asigna el resultado a esMayor

En el ejemplo anterior, se utilizaron operadores aritméticos y de comparación para construir expresiones que realizan cálculos y toman decisiones en el programa.


Operaciones con cadenas de texto:

  • Concatenación (+): une dos cadenas de texto.

  • Comparación de cadenas de texto (equals): devuelve verdadero si dos cadenas de texto son iguales.

arduinoCopy code
String nombre = "Juan";
String apellido = "Pérez";
String nombreCompleto = nombre + " " + apellido; // la expresión une las cadenas nombre y apellido con un espacio en blanco y lo asigna a nombreCompletoboolean sonIguales = nombre.equals(apellido); // la expresión compara si nombre y apellido son iguales y asigna el resultado a sonIguales

Operaciones con matrices:

  • Acceso a un elemento de matriz ([]): accede a un elemento de una matriz en una posición específica.

  • Iteración sobre los elementos de una matriz (for-each): itera sobre los elementos de una matriz.

scssCopy code
int[] numeros = {1, 2, 3, 4, 5};
int tercerNumero = numeros[2]; // la expresión accede al tercer elemento de la matriz y lo asigna a tercerNumerofor(int numero : numeros) {
    System.out.println(numero); // la expresión itera sobre los elementos de la matriz y los imprime en la consola
}

Operaciones con objetos:

  • Acceso a un campo de objeto (punto): accede a un campo de un objeto.

  • Invocación de un método (punto y paréntesis): invoca un método en un objeto.

javaCopy code
Persona persona = new Persona("Juan", "Pérez");
String nombre = persona.nombre; // la expresión accede al campo nombre del objeto persona y lo asigna a nombre

persona.saludar(); // la expresión invoca el método saludar en el objeto persona

Las expresiones en Java pueden ser tan simples o complejas como sea necesario para realizar la tarea requerida. Los operadores y las expresiones son la base de la programación en Java y permiten a los programadores realizar cálculos y tomar decisiones de manera eficiente y efectiva en sus programas.


Estructuras de control de flujo


Las estructuras de control de flujo son herramientas utilizadas para tomar decisiones y controlar el flujo de ejecución de un programa. Las estructuras de control de flujo más comunes son:


Estructuras de control condicionales:

  • If: permite ejecutar un bloque de código si se cumple una condición.

  • If-else: permite ejecutar un bloque de código si se cumple una condición y otro bloque de código si no se cumple.

  • If-else if-else: permite evaluar múltiples condiciones y ejecutar diferentes bloques de código dependiendo de las condiciones evaluadas.

Ejemplo de if:

csharpCopy code
int edad = 18;
if (edad >= 18) {
    System.out.println("Eres mayor de edad");
}

Ejemplo de if-else:

csharpCopy code
int edad = 16;
if (edad >= 18) {
    System.out.println("Eres mayor de edad");
} else {
    System.out.println("Eres menor de edad");
}

Ejemplo de if-else if-else:

csharpCopy code
int calificacion = 80;
if (calificacion >= 90) {
    System.out.println("A");
} else if (calificacion >= 80) {
    System.out.println("B");
} else if (calificacion >= 70) {
    System.out.println("C");
} else {
    System.out.println("F");
}

Estructuras de control de bucles:

  • While: permite ejecutar un bloque de código mientras se cumpla una condición.

  • Do-while: permite ejecutar un bloque de código al menos una vez y luego repetirlo mientras se cumpla una condición.

  • For: permite iterar sobre una secuencia de valores y ejecutar un bloque de código para cada valor en la secuencia.

  • For-each: permite iterar sobre los elementos de una matriz o una colección.

Ejemplo de while:

cssCopy code
int i = 0;
while (i < 5) {
    System.out.println(i);
    i++;
}

Ejemplo de do-while:

csharpCopy code
int i = 0;
do {
    System.out.println(i);
    i++;
} while (i < 5);

Ejemplo de for:

cssCopy code
for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

Ejemplo de for-each:

csharpCopy code
int[] numeros = {1, 2, 3, 4, 5};
for (int numero : numeros) {
    System.out.println(numero);
}

Las estructuras de control de flujo son una parte fundamental de la programación en Java y permiten a los programadores controlar el flujo de ejecución de sus programas de manera efectiva.


Arreglos


Un arreglo (array) es una estructura de datos que permite almacenar una colección de elementos del mismo tipo de manera contigua en memoria. Los arreglos son objetos y se pueden declarar y crear de la siguiente manera:

cssCopy code
tipoDato[] nombreArreglo = new tipoDato[tamaño];

Por ejemplo, para declarar y crear un arreglo de enteros con tamaño 5, se puede utilizar la siguiente línea de código:

arduinoCopy code
int[] numeros = new int[5];

También se pueden inicializar los elementos de un arreglo al momento de su creación, de la siguiente manera:

cssCopy code
tipoDato[] nombreArreglo = {elemento1, elemento2, elemento3, ...};

Por ejemplo, para declarar y crear un arreglo de enteros con valores 1, 2, 3, 4, 5, se puede utilizar la siguiente línea de código:

arduinoCopy code
int[] numeros = {1, 2, 3, 4, 5};

Los elementos de un arreglo se pueden acceder y modificar utilizando un índice (posición) dentro del arreglo. El índice de un arreglo comienza en 0 y termina en tamaño-1, donde tamaño es el número de elementos del arreglo. Por ejemplo, para acceder al tercer elemento de un arreglo de enteros, se utiliza la siguiente línea de código:

arduinoCopy code
int tercerNumero = numeros[2];

Para modificar el valor del tercer elemento de un arreglo de enteros a 10, se utiliza la siguiente línea de código:

cssCopy code
numeros[2] = 10;

Los arreglos se utilizan comúnmente para almacenar colecciones de datos del mismo tipo, como listas de números, cadenas de texto, objetos, entre otros. También se pueden utilizar para representar estructuras de datos más complejas, como matrices y grafos.


Clases y objetos


Las clases son plantillas que definen las propiedades y el comportamiento de un objeto. Un objeto, por otro lado, es una instancia de una clase. Los objetos tienen un estado (almacenado en sus atributos) y un comportamiento (definido por sus métodos).

Para definir una clase en Java, se utiliza la siguiente sintaxis:

typescriptCopy code
public class NombreClase {
    // Atributos
    tipoDato nombreAtributo1;
    tipoDato nombreAtributo2;
    // ...// Métodospublic void nombreMetodo1() {
        // Código del método
    }
    
    public tipoDato nombreMetodo2(parametro1, parametro2, ...) {
        // Código del método
    }
    
    // ...
}

Los atributos son variables que almacenan el estado de un objeto y los métodos son funciones que definen su comportamiento. Los métodos pueden tener parámetros y pueden devolver valores.

Para crear un objeto en Java, se utiliza la siguiente sintaxis:

javaCopy code
NombreClase nombreObjeto = new NombreClase();

Por ejemplo, para crear un objeto de la clase Persona, se puede utilizar la siguiente línea de código:

javaCopy code
Persona persona1 = new Persona();

Una vez creado un objeto, se pueden acceder a sus atributos y métodos utilizando la notación de punto. Por ejemplo, para acceder al atributo nombre de un objeto persona1 de la clase Persona, se puede utilizar la siguiente línea de código:

arduinoCopy code
String nombre = persona1.nombre;

Para llamar al método saludar de un objeto persona1 de la clase Persona, se puede utilizar la siguiente línea de código:

scssCopy code
persona1.saludar();

Las clases y los objetos son fundamentales en la programación orientada a objetos en Java y permiten crear programas modulares, fáciles de entender y de mantener.


Herencia y polimorfismo


La herencia es un mecanismo que permite crear nuevas clases a partir de clases existentes, de manera que la nueva clase herede los atributos y métodos de la clase original. La clase original se conoce como la clase base o superclase, y la nueva clase se conoce como la clase derivada o subclase.


Para definir una subclase en Java, se utiliza la siguiente sintaxis:

javaCopy code
public class NombreSubclase extends NombreSuperclase {
    // Atributos y métodos adicionales
}

Por ejemplo, para crear una subclase Empleado a partir de la superclase Persona, se puede utilizar la siguiente línea de código:

csharpCopy code
public class Empleado extends Persona {
    int sueldo;
    
    public void trabajar() {
        // Código del método
    }
}

La subclase Empleado hereda los atributos y métodos de la superclase Persona, y además agrega el atributo sueldo y el método trabajar.


El polimorfismo es otro concepto importante en la programación orientada a objetos en Java, y se refiere a la capacidad de un objeto de tomar diferentes formas. En Java, el polimorfismo se puede implementar a través de la herencia y de la interfaz. Por ejemplo, si se tienen una superclase Animal y dos subclases Perro y Gato, ambas subclases pueden ser tratadas como objetos de la superclase Animal, lo que permite escribir código genérico que funcione con cualquier objeto Animal. Esto se conoce como polimorfismo de subtipos.


Además, en Java, también se puede implementar el polimorfismo a través de la interfaz, que es un conjunto de métodos abstractos (sin implementación) que una clase puede implementar. Una clase puede implementar múltiples interfaces, lo que le permite tomar diferentes formas y comportamientos. Esto se conoce como polimorfismo de interfaces.


La herencia y el polimorfismo son conceptos fundamentales en la programación orientada a objetos en Java, y permiten crear programas más flexibles, modulares y fáciles de mantener.


Interfaces


Una interfaz es una colección de métodos abstractos (sin implementación) y constantes (variables final estáticas) que se pueden utilizar como un tipo de dato. Una interfaz define un conjunto de métodos que una clase debe implementar para cumplir con ciertas funcionalidades.


Para definir una interfaz en Java, se utiliza la siguiente sintaxis:

javaCopy code
public interface NombreInterfaz {
    // Métodos abstractospublic tipoDato nombreMetodo1(parametros);
    public tipoDato nombreMetodo2(parametros);
    // ...// Constantespublic static final tipoDato NOMBRE_CONSTANTE = valor;
    // ...
}

Por ejemplo, para crear una interfaz Vehiculo que defina los métodos acelerar y frenar, se puede utilizar la siguiente línea de código:

csharpCopy code
public interface Vehiculo {
    public void acelerar(int velocidad);
    public void frenar();
    public static final int VELOCIDAD_MAXIMA = 120;
}

Para implementar una interfaz en una clase, se utiliza la siguiente sintaxis:

javaCopy code
public class NombreClase implements NombreInterfaz {
    // Implementación de los métodos abstractos
}

Por ejemplo, para implementar la interfaz Vehiculo en la clase Coche, se puede utilizar la siguiente línea de código:

csharpCopy code
public class Coche implements Vehiculo {
    int velocidadActual;
    
    public void acelerar(int velocidad) {
        velocidadActual += velocidad;
        if (velocidadActual > VELOCIDAD_MAXIMA) {
            velocidadActual = VELOCIDAD_MAXIMA;
        }
    }
    
    public void frenar() {
        velocidadActual = 0;
    }
}

La clase Coche implementa los métodos acelerar y frenar de la interfaz Vehiculo. Además, la clase Coche puede utilizar la constante VELOCIDAD_MAXIMA definida en la interfaz Vehiculo.


Las interfaces son una herramienta poderosa en la programación orientada a objetos en Java, ya que permiten definir contratos entre objetos y asegurar que las clases implementen ciertas funcionalidades de manera consistente.


Excepciones


En Java, las excepciones son eventos que ocurren durante la ejecución del programa que interrumpen el flujo normal de ejecución. Cuando se produce una excepción, el programa puede manejarla para intentar recuperarse del error y continuar su ejecución, o bien detener su ejecución si la excepción no puede ser manejada. En Java, las excepciones se representan mediante clases que extienden la clase Throwable. Existen dos tipos de excepciones en Java: las excepciones comprobadas y las excepciones no comprobadas.


Las excepciones comprobadas son aquellas que deben ser manejadas por el programa para continuar su ejecución. Estas excepciones deben ser declaradas en la firma del método utilizando la palabra clave throws, indicando que el método puede lanzar una excepción.


Por ejemplo:

csharpCopy code
public void leerArchivo() throws FileNotFoundException {
    // Código para leer el archivo
}

La excepción FileNotFoundException es una excepción comprobada que se lanza cuando no se encuentra el archivo especificado para su lectura. En este caso, el método leerArchivo() declara que puede lanzar esta excepción. Las excepciones no comprobadas son aquellas que no necesitan ser declaradas en la firma del método. Estas excepciones pueden ser manejadas o no manejadas, y su lanzamiento es opcional.


En Java, el manejo de excepciones se realiza mediante el uso de bloques try-catch. En un bloque try, se coloca el código que puede lanzar una excepción, y en un bloque catch, se coloca el código que maneja la excepción en caso de que sea lanzada.

Por ejemplo:

csharpCopy code
try {
    // Código que puede lanzar una excepción
} catch (ExcepcionTipo1 e1) {
    // Código para manejar la excepción de tipo ExcepcionTipo1
} catch (ExcepcionTipo2 e2) {
    // Código para manejar la excepción de tipo ExcepcionTipo2
} finally {
    // Código que se ejecuta siempre, independientemente de si se lanzó una excepción o no
}

En el bloque try, se coloca el código que puede lanzar una excepción. Si se lanza una excepción de tipo ExcepcionTipo1, se ejecutará el bloque catch correspondiente. Si se lanza una excepción de tipo ExcepcionTipo2, se ejecutará el bloque catch correspondiente. Si no se lanza ninguna excepción, se omiten los bloques catch y se ejecuta el bloque finally.


Las excepciones son una herramienta fundamental en Java para manejar errores y situaciones excepcionales durante la ejecución del programa. El manejo adecuado de las excepciones puede mejorar la robustez y la fiabilidad de un programa, y facilitar su mantenimiento y evolución.


Entrada y salida


La entrada y salida de datos se realiza mediante la clase Scanner para la entrada de datos y las clases System.out y PrintStream para la salida de datos. La clase Scanner se utiliza para leer datos del usuario o de un archivo. Para utilizar la clase Scanner, es necesario crear una instancia de la clase y pasarle como parámetro la fuente de entrada de datos, como puede ser la entrada estándar (System.in) o un archivo.


Por ejemplo, para leer un número entero desde la entrada estándar, se puede utilizar el siguiente código:

csharpCopy code
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese un número entero: ");
int numero = scanner.nextInt();
System.out.println("El número ingresado es: " + numero);

En este ejemplo, se crea una instancia de la clase Scanner para leer datos desde la entrada estándar (System.in). Luego, se muestra un mensaje en pantalla pidiendo al usuario que ingrese un número entero. La función nextInt() de la clase Scanner se utiliza para leer un número entero desde la entrada estándar y almacenarlo en la variable numero. Finalmente, se muestra en pantalla el número ingresado por el usuario.


Para la salida de datos, se utilizan las clases System.out y PrintStream. La clase System.out representa la salida estándar del programa, y se utiliza para imprimir datos en la consola.


Por ejemplo, para imprimir un mensaje en pantalla, se puede utilizar el siguiente código:

csharpCopy code
System.out.println("Hola, mundo!");

En este ejemplo, se utiliza la función println() de la clase System.out para imprimir en pantalla el mensaje "Hola, mundo!". También se pueden utilizar objetos de la clase PrintStream para imprimir datos en archivos o en otros dispositivos de salida.


La entrada y salida de datos son operaciones fundamentales en cualquier programa, y en Java se realizan mediante la clase Scanner para la entrada de datos y las clases System.out y PrintStream para la salida de datos. Con estas herramientas, es posible interactuar con el usuario, leer y escribir archivos, y enviar datos a otros dispositivos de salida.


Colecciones


En Java, las colecciones son estructuras de datos que permiten almacenar y manipular conjuntos de objetos. Java ofrece un conjunto de interfaces y clases que proporcionan diversas implementaciones de colecciones, como listas, conjuntos y mapas.


Las interfaces de colecciones más importantes en Java son Collection y Map. La interfaz Collection representa una colección de objetos y define las operaciones básicas que se pueden realizar sobre ellas, como agregar, eliminar y buscar elementos. La interfaz Map, por su parte, representa un mapeo de claves y valores y se utiliza para almacenar y recuperar datos de forma asociativa.


Las clases más comunes que implementan la interfaz Collection son List, Set y Queue. La clase List representa una lista de elementos ordenados y permite el acceso a los elementos mediante índices. La clase Set representa un conjunto de elementos únicos, es decir, no permite la repetición de elementos. La clase Queue representa una cola de elementos y se utiliza para implementar estructuras como colas y pilas.


Entre las clases que implementan la interfaz Map, las más utilizadas son HashMap y TreeMap. La clase HashMap implementa un mapeo de claves y valores utilizando una tabla hash, mientras que la clase TreeMap implementa un mapeo utilizando un árbol binario de búsqueda.


Además de estas clases, Java también proporciona otras implementaciones de colecciones, como LinkedHashSet, LinkedHashMap y PriorityQueue, entre otras. El uso de colecciones en Java permite manejar conjuntos de objetos de manera eficiente y flexible. Estas estructuras de datos son muy utilizadas en la programación y se pueden adaptar a diferentes situaciones y necesidades de un programa. Además, las interfaces y clases de colecciones en Java proporcionan métodos y operaciones útiles que facilitan la manipulación y el procesamiento de datos.


¿Quieres saber más?


177 visualizaciones0 comentarios
bottom of page