Skip to content

Commit 0bf2845

Browse files
committed
JAVA - Clases contenedoras, Excepciones try...catch, Expresiones lambda, Expresiones regulares, Hilos, Iterador
Signed-off-by: Alejandro Alfaro Sánchez <alejandro@alejandroalsa.es>
1 parent 1168adc commit 0bf2845

7 files changed

+625
-1
lines changed

_posts/2023-12-15-java-metodos-clase.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: métodos de clase
2+
title: Métodos de clase
33
date: 2023-12-15 12:00:00 +0800
44
categories: [Programación, Java]
55
tags: [Java]
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
title: Clases contenedoras
3+
date: 2024-01-07 9:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Clases contenedoras
9+
10+
Las clases Wrapper permiten utilizar tipos de datos primitivos (`int`, `boolean`, etc.) como objetos.
11+
12+
La siguiente tabla muestra el tipo primitivo y la clase contenedora equivalente:
13+
14+
| Tipo de Datos Primitivo | Clase Envolvente |
15+
|-------------------------|------------------|
16+
| byte | Byte |
17+
| short | Short |
18+
| int | Integer |
19+
| long | Long |
20+
| float | Float |
21+
| double | Double |
22+
| boolean | Boolean |
23+
| char | Character |
24+
25+
A veces es necesario utilizar clases envoltorio, por ejemplo cuando se trabaja con objetos `Collection`, como `ArrayList`, donde no se pueden utilizar tipos primitivos (la lista sólo puede almacenar objetos):
26+
27+
```java
28+
ArrayList<int> misNumeros = new ArrayList<int>(); // Error
29+
30+
ArrayList<Integer> misNumeros = new ArrayList<Integer>(); // Correcto
31+
```
32+
33+
## Crear objetos envolventes
34+
35+
Para crear un objeto envoltorio, puedes utilizar la clase envoltorio en lugar del tipo primitivo. Para obtener el valor, basta con imprimir el objeto:
36+
37+
```java
38+
public class main {
39+
public static void main(String[] args) {
40+
Integer miInt = 5;
41+
Double miDoble = 5.99;
42+
Character miCaracter = 'A';
43+
System.out.println(miInt);
44+
System.out.println(miDoble);
45+
System.out.println(miCaracter);
46+
}
47+
}
48+
```
49+
50+
Como ahora trabajas con objetos, puedes utilizar ciertos métodos para obtener información sobre el objeto específico.
51+
52+
Por ejemplo, los siguientes métodos se utilizan para obtener el valor asociado al objeto envoltorio correspondiente: `intValue()`, `byteValue()`, `shortValue()`, `longValue()`, `floatValue()`, `doubleValue()`, `charValue()`, `booleanValue()`.
53+
54+
Este ejemplo devolverá el mismo resultado que el ejemplo anterior:
55+
56+
```java
57+
public class main {
58+
public static void main(String[] args) {
59+
Integer miInt = 5;
60+
Double miDoble = 5.99;
61+
Character miCaracter = 'A';
62+
System.out.println(miInt.intValue());
63+
System.out.println(miDoble.doubleValue());
64+
System.out.println(miCaracter.charValue());
65+
}
66+
}
67+
```
68+
69+
Otro método útil es el método `toString()`, que se utiliza para convertir objetos envolventes en cadenas.
70+
71+
En el siguiente ejemplo, convertimos un entero en una cadena y utilizamos el método `length()` de la clase `String` para obtener la longitud de la "cadena":
72+
73+
```java
74+
public class main {
75+
public static void main(String[] args) {
76+
Integer miInt = 100;
77+
String miString = miInt.toString();
78+
System.out.println(miString.length());
79+
}
80+
}
81+
```
82+
83+
Salida:
84+
85+
```txt
86+
3
87+
```
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
---
2+
title: Excepciones Try...Catch
3+
date: 2024-01-07 10:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Excepciones Try...Catch
9+
10+
Al ejecutar código Java pueden ocurrir diferentes errores: errores de codificación cometidos por el programador, errores por entrada incorrecta, u otras cosas imprevisibles.
11+
12+
Cuando se produce un error, Java normalmente se detiene y genera un mensaje de error. El término técnico para esto es: excepción.
13+
14+
La sentencia try le permite definir un bloque de código para que se compruebe si hay errores mientras se ejecuta.
15+
16+
La sentencia `catch` permite definir un bloque de código que se ejecutará si se produce un error en el bloque try.
17+
18+
Las palabras clave `try` y `catch` vienen en pares:
19+
20+
```java
21+
try {
22+
// Bloque de código para probar
23+
}
24+
catch(Exception e) {
25+
// Bloque de código para gestionar errores
26+
}
27+
```
28+
29+
Veamos el siguiente ejemplo:
30+
31+
```java
32+
// Esto generará un error porque misNumeros[10] no existe.
33+
34+
public class main {
35+
public static void main(String[ ] args) {
36+
int[] misNumeros = {1, 2, 3};
37+
System.out.println(misNumeros[10]); // error
38+
}
39+
}
40+
```
41+
42+
Salida:
43+
44+
```txt
45+
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
46+
at datosBasicos.main.main(main.java:6)
47+
```
48+
49+
Si ocurre un error, podemos usar `try...catch` para detectar el error y ejecutar algún código para manejarlo:
50+
51+
```java
52+
public class main {
53+
public static void main(String[ ] args) {
54+
try {
55+
int[] misNumeros = {1, 2, 3};
56+
System.out.println(misNumeros[10]);
57+
} catch (Exception e) {
58+
System.out.println("Algo salió mal.");
59+
}
60+
}
61+
}
62+
```
63+
64+
Salida:
65+
66+
```txt
67+
Algo salió mal.
68+
```
69+
70+
La sentencia `finally` permite ejecutar código, después de `try...catch`, independientemente del resultado:
71+
72+
```java
73+
public class main {
74+
public static void main(String[ ] args) {
75+
try {
76+
int[] misNumeros = {1, 2, 3};
77+
System.out.println(misNumeros[10]);
78+
} catch (Exception e) {
79+
System.out.println("Algo salió mal.");
80+
} finally {
81+
System.out.println("El 'try catch' ha terminado.");
82+
}
83+
}
84+
}
85+
```
86+
87+
Salida:
88+
89+
```txt
90+
Algo salió mal.
91+
El 'try catch' ha terminado.
92+
```
93+
94+
La sentencia `throw` permite crear un error personalizado.
95+
96+
La sentencia `throw` se utiliza junto con un tipo de excepción. Hay muchos tipos de excepción disponibles en Java: `ArithmeticException`, `FileNotFoundException`, `ArrayIndexOutOfBoundsException`, `SecurityException`, etc:
97+
98+
```java
99+
public class main {
100+
static void comprobarEdad(int edad) {
101+
if (edad < 18) {
102+
throw new ArithmeticException("Acceso denegado - Debes tener al menos 18 años".);
103+
}
104+
else {
105+
System.out.println("Acceso concedido - ¡Ya eres mayor!");
106+
}
107+
}
108+
109+
public static void main(String[] args) {
110+
comprobarEdad(15); // Establecer la edad en 15 (que es inferior a 18...)
111+
}
112+
}
113+
```
114+
115+
Salida:
116+
117+
```txt
118+
Exception in thread "main" java.lang.ArithmeticException: Acceso denegado - Debes tener al menos 18 años
119+
at datosBasicos.main.comprobarEdad(main.java:6)
120+
at datosBasicos.main.main(main.java:14)
121+
```
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
---
2+
title: Expresiones Lambda
3+
date: 2024-01-07 13:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Expresiones Lambda
9+
10+
Las expresiones Lambda se agregaron en Java 8.
11+
12+
Una expresión lambda es un bloque corto de código que toma parámetros y devuelve un valor. Las expresiones lambda son similares a los métodos, pero no necesitan un nombre y se puede implementar directamente en el cuerpo de un método.
13+
14+
La expresión lambda más simple contiene un único parámetro y una expresión:
15+
16+
```txt
17+
parámetro -> expresión
18+
```
19+
20+
Para utilizar más de un parámetro, los envolvemos entre paréntesis:
21+
22+
```txt
23+
(parámetro1, parámetro2) -> expresión
24+
```
25+
26+
Las expresiones son limitadas. Tienen que devolver inmediatamente un valor y no pueden contener variables, asignaciones o declaraciones tales como `if` o `for`. Para hacer operaciones algo más complejas, se puede utilizar bloques de código con llaves. Si la expresión lambda necesita devolver un valor, entonces el bloque de código debe tener una declaración `return`.
27+
28+
```txt
29+
(parámetro1, parámetro2) -> { bloque de código }
30+
```
31+
32+
Las expresiones lambda normalmente se pasan como parámetros a una función
33+
34+
```java
35+
// Utiliza una expresión lambda en el método forEach() de ArrayList para imprimir cada elemento de la lista
36+
37+
import java.util.ArrayList;
38+
39+
public class main {
40+
public static void main(String[] args) {
41+
ArrayList<Integer> numeros = new ArrayList<Integer>();
42+
numeros.add(3);
43+
numeros.add(1);
44+
numeros.add(7);
45+
numeros.add(4);
46+
numeros.forEach( (n) -> { System.out.println(n); } );
47+
}
48+
}
49+
```
50+
51+
Las expresiones lambda se pueden almacenar en variables si el tipo de variable es una interfaz que tiene un solo método. La expresión lambda debe tener el mismo número de parámetros y el mismo tipo de retorno que ese método. Java tiene muchos de estos tipos de interfaces integradas, como la `Consumer` interfaz (que se encuentra en el paquete `java.util`) utilizada para las listas
52+
53+
```java
54+
// Utiliza la interfaz Consumer de Java para almacenar una expresión lambda en una variable
55+
56+
import java.util.ArrayList;
57+
import java.util.function.Consumer;
58+
59+
public class main {
60+
public static void main(String[] args) {
61+
ArrayList<Integer> numeros = new ArrayList<Integer>();
62+
numeros.add(3);
63+
numeros.add(1);
64+
numeros.add(7);
65+
numeros.add(4);
66+
Consumer<Integer> metodo = (n) -> { System.out.println(n); };
67+
numeros.forEach( metodo );
68+
}
69+
}
70+
```
71+
72+
Para utilizar una expresión lambda en un método, éste debe tener un parámetro cuyo tipo sea una interfaz de método único. Al llamar al método de la interfaz se ejecutará la expresión lambda:
73+
74+
```java
75+
// Método que toma una expresión lambda como parámetro
76+
77+
interface funcionCadena {
78+
String run(String str);
79+
}
80+
81+
public class main {
82+
public static void main(String[] args) {
83+
funcionCadena exclamacion = (s) -> s + "!";
84+
funcionCadena pregunta = (s) -> s + "?";
85+
funcionCadena("Hola", exclamacion);
86+
funcionCadena("Hola", pregunta);
87+
}
88+
public static void funcionCadena(String str, funcionCadena formato) {
89+
String resultado = formato.run(str);
90+
System.out.println(resultado);
91+
}
92+
}
93+
```

0 commit comments

Comments
 (0)