Java
Java
¿Qué es Java?
Java es un lenguaje de programación popular y potente, creado en 1995.
Se utiliza para:
Sintaxis de Java
En el capítulo anterior, creamos un archivo Java llamado [Link], y utilizamos el siguiente
código para imprimir "Hola Mundo" en la pantalla:
Ejemplo explicado
Cada línea de código que se ejecuta en Java debe estar dentro de un class. El nombre de la clase
siempre debe comenzar con una letra mayúscula. En nuestro ejemplo, nombramos la clase Main .
Nota: Java distingue entre mayúsculas y minúsculas. MyClassy myclassse tratarían como dos
nombres completamente diferentes.
El nombre del archivo Java debe coincidir con el nombre de la clase. Por lo tanto, si tu clase se
llama Main, el archivo debe guardarse como [Link]. Esto se debe a que Java utiliza el nombre
de la clase para encontrar y ejecutar tu código. Si los nombres no coinciden, Java generará un
error y el programa no se ejecutará.
Al guardar el archivo, guárdelo con el nombre de la clase y agréguelo .javaal final del nombre del
archivo. Para ejecutar el ejemplo anterior en su computadora, asegúrese de que Java esté
correctamente instalado: vaya al capítulo "Primeros pasos" para obtener instrucciones sobre cómo
instalar Java. La salida debería ser:
El método principal
Este main()método es necesario en todos los programas Java. Es donde comienza la ejecución del
programa:
Por ahora, no necesitas entender las palabras clave public, static, y void. Aprenderás sobre
ellas más adelante en este tutorial. Solo recuerda: main()es el punto de partida de todo programa
Java.
[Link]()
Dentro del main()método, podemos usarlo println() para imprimir una línea de texto en la
pantalla:
[Link]()Puede parecer largo, pero puedes pensar en ello como un solo comando
que significa: "Envía este texto a la pantalla".
Aquí te explicamos qué significa cada parte (más adelante conocerás los detalles):
Declaraciones
Un programa informático es una lista de "instrucciones" que deben ser "ejecutadas" por un
ordenador.
La siguiente instrucción "instruye" al compilador para que imprima el texto "¡Java es divertido!" en
la pantalla:
Consejo: Puedes pensar en una instrucción como en una oración en inglés. Así como las oraciones
terminan con un punto ., las instrucciones de Java terminan con un punto y coma ;.
Muchas afirmaciones
La mayoría de los programas Java contienen muchas instrucciones.
Ejemplo explicado
Del ejemplo anterior, tenemos tres afirmaciones:
[Link]("Hello World!");
[Link]("Have a good day!");
[Link]("Learning Java is fun!");
Primero se ejecuta la primera instrucción (imprime "¡Hola Mundo!" en la pantalla).
Luego se ejecuta la segunda instrucción (imprime "¡Que tengas un buen día!" en la pantalla).
Y finalmente, se ejecuta la tercera instrucción (imprime "¡Aprender Java es divertido!" en la
pantalla).
Aprenderás más sobre las sentencias al leer este tutorial. Por ahora, recuerda terminarlas siempre
con un punto y coma para evitar errores.
Instrucciones
Imprimir texto
En el capítulo anterior aprendiste que puedes usar este println()método para mostrar valores o
imprimir texto en Java:
Puedes añadir tantos println()métodos como quieras. Ten en cuenta que se añadirá una nueva
línea por cada método:
Comillas dobles
El texto debe ir entre comillas dobles "".
El método Print()
También existe un print()método similar a println().
Tenga en cuenta que agregamos un espacio adicional (después de "¡Hola Mundo!" en el ejemplo
anterior) para una mejor legibilidad.
En este tutorial, solo utilizaremos println() ya que facilita la lectura del código.
Imprimir números
También puedes utilizar este println()método para imprimir números.
Sin embargo, a diferencia del texto, no colocamos números entre comillas dobles:
Comentarios de Java
Los comentarios pueden utilizarse para explicar el código Java y hacerlo más legible. También
pueden usarse para impedir la ejecución al probar código alternativo.
Cualquier texto que se encuentre entre //y el final de la línea es ignorado por Java (no se
ejecutará).
Este ejemplo utiliza un comentario de una sola línea antes de una línea de código:
Variables de Java
Las variables son contenedores para almacenar valores de datos.
String- Almacena texto, como "Hola". Los valores de cadena están entre comillas dobles.
int- Almacena números enteros, sin decimales, como 123 o -123.
float- Almacena números de punto flotante, con decimales, como 19.99 o -19.99.
char- Almacena caracteres individuales, como 'a' o 'B'. Los valores de los caracteres se
encierran entre comillas simples.
boolean- Almacena valores con dos estados: verdadero o falso
Ejemplo
Crea una variable llamada nombre de tipo Stringy asígnale el valor " John ".
Luego la usamos println()para imprimir la variable nombre :
Variables finales
Si no quieres que otros (o tú mismo) sobrescriban los valores existentes, usa la finalpalabra clave
(esto declarará la variable como "final" o "constante", lo que significa inmutable y de solo lectura):
Otros tipos
Una demostración de cómo declarar variables de otros tipos:
int myNum = 5;
float myFloatNum = 5.99f;
char myLetter = 'D';
boolean myBool = true;
String myText = "Hello";
Variables de visualización
Este println()método se utiliza a menudo para mostrar variables.
Para valores numéricos, el +carácter funciona como un operador matemático (nótese que aquí
usamos intvariables (enteras)):
Identificadores
Todas las variables de Java deben identificarse con nombres únicos .
Los identificadores pueden ser nombres cortos (como x e y) o nombres más descriptivos (edad,
suma, volumen total).
Nota: Se recomienda utilizar nombres descriptivos para crear código comprensible y fácil de
mantener:
Los nombres pueden contener letras, dígitos, guiones bajos y signos de dólar.
Los nombres deben comenzar con una letra.
Los nombres deben comenzar con una letra minúscula y no pueden contener espacios en
blanco.
Los nombres también pueden comenzar con $ y _
Los nombres distinguen entre mayúsculas y minúsculas ("myVar" y "myvar" son variables
diferentes).
Las palabras reservadas (como las palabras clave de Java, por ejemplo into boolean) no
se pueden usar como nombres
Una variable declarada con finalse convierte en una constante , lo que significa que es
inmutable y de solo lectura:
Nota: Por convención, las variables finales en Java suelen escribirse en mayúsculas (por
ejemplo, BIRTHYEAR). No es obligatorio, pero resulta útil para la legibilidad del código y es común
entre muchos programadores.
Sin embargo, como ejemplo práctico del uso de variables, hemos creado un programa que
almacena diferentes datos sobre un estudiante universitario:
Instrucciones
3. Imprimirname
4. Imprimirage
Nota: Recuerde usar punto y coma.
Tipos de datos primitivos: incluye byte, short, int, long, float, double, booleanychar
StringTipos de datos no primitivos , como matrices y clases (aprenderás más sobre estos
en un capítulo posterior).
Nota: Esta regla hace que Java sea más seguro, ya que el compilador te detendrá si intentas
mezclar tipos por error.
Si realmente necesita cambiar entre tipos, debe utilizar métodos de conversión o conversión de
tipos (por ejemplo, convertir un inten un double).
Números
Los tipos de números primitivos se dividen en dos grupos:
Los tipos enteros almacenan números enteros, positivos o negativos (como 123 o -456), sin
decimales. Los tipos válidos son byte, short, int y long. El tipo que debe usar depende del valor
numérico.
Los tipos de punto flotante representan números con una parte fraccionaria, que contienen
uno o más decimales. Hay dos tipos: floaty double.
Aunque en Java existen muchos tipos numéricos, los más utilizados son int(para números
enteros) y double(para números de coma flotante). Sin embargo, los describiremos todos a
medida que continúe leyendo.
Tipos de enteros
Byte
Este bytetipo de datos puede almacenar números enteros desde -128 hasta 127. Esto se puede
usar en lugar de intotros tipos de enteros para ahorrar memoria cuando se tiene la certeza de
que el valor estará entre -128 y 127:
Corto
Este shorttipo de datos puede almacenar números enteros desde -32768 hasta 32767:
Int
Este inttipo de dato puede almacenar números enteros desde -2147483648 hasta
2147483647. En general, y en este tutorial, este intes el tipo de dato preferido cuando creamos
variables con un valor numérico.
Largo
Este longtipo de dato puede almacenar números enteros desde -9223372036854775808 hasta
9223372036854775807. Se utiliza cuando un entero no es lo suficientemente grande para
almacenar el valor. Tenga en cuenta que debe terminar el valor con una "L".
Los tipos de datos floaty doublepueden almacenar números fraccionarios. Tenga en cuenta que
debe terminar el valor con una "f" para números de coma flotante y una "d" para números de
doble precisión:
La precisión de un valor de punto flotante indica cuántos dígitos puede tener después del punto
decimal. La precisión de un número entero floates de solo 6 o 7 dígitos decimales, mientras
que doublelas variables tienen una precisión de aproximadamente 16 dígitos.
Números científicos
Un número de punto flotante también puede ser un número científico con una "e" para indicar la
potencia de 10:
Tipos booleanos
Muy a menudo en programación, necesitarás un tipo de dato que solo puede tener uno de dos
valores, como por ejemplo:
•SÍ / NO
•ENCENDIDO / APAGADO
•VERDADERO / FALSO
Para ello, Java dispone de un booleantipo de dato que solo puede tomar los valores trueo false:
Como alternativa, si está familiarizado con los valores ASCII, puede utilizarlos para mostrar ciertos
caracteres:
Consejo: Puede encontrar una lista de todos los valores ASCII en nuestra Tabla de Referencia
ASCII .
Instrumentos de cuerda
Este Stringtipo de datos se utiliza para almacenar una secuencia de caracteres (texto). Los
valores de cadena deben ir entre comillas dobles:
El tipo String se usa e integra tanto en Java que algunos lo llaman "el noveno tipo especial".
En Java, una cadena de caracteres (String) es un tipo de dato no primitivo , ya que hace
referencia a un objeto. El objeto String tiene métodos que se utilizan para realizar ciertas
operaciones con cadenas. No te preocupes si aún no entiendes el término "objeto" .
Aprenderemos más sobre cadenas y objetos en un capítulo posterior.
Las principales diferencias entre los tipos de datos primitivos y no primitivos son:
•Los tipos primitivos en Java están predefinidos e integrados en el lenguaje, mientras que
los tipos no primitivos son creados por el programador (excepto String).
•Los tipos no primitivos pueden utilizarse para llamar a métodos que realizan ciertas
operaciones, mientras que los tipos primitivos no.
•Los tipos primitivos comienzan con una letra minúscula (como int), mientras que los tipos
no primitivos suelen comenzar con una letra mayúscula (como String).
•Los tipos primitivos siempre tienen un valor, mientras que los tipos no primitivos pueden
ser null.
Ejemplos de tipos no primitivos son las cadenas de caracteres , los arreglos , las clases , etc.
Aprenderás más sobre ellos en un capítulo posterior.
Esta varpalabra clave permite que el compilador detecte automáticamente el tipo de una variable
en función del valor que se le asigne.
Esto te ayuda a escribir código más limpio y a evitar la repetición de tipos, especialmente para
tipos largos o complejos.
Notas importantes
1. varSolo funciona cuando se asigna un valor al mismo tiempo (no se puede declarar var x;sin
asignar un valor):
2. Una vez elegido el tipo, este permanece igual. Vea el ejemplo a continuación:
Pero para tipos más complejos, como ArrayListo HashMap, varpuede hacer que el código sea más
corto y fácil de leer:
// Without var
ArrayList<String> cars = new ArrayList<String>();
// With var
var cars = new ArrayList<String>();
No te preocupes si el ejemplo anterior parece un poco avanzado; aprenderás más sobre estos
tipos complejos más adelante. Por ahora, recuerda que varse introdujo en Java 10, y si trabajas
con otros, es posible que lo veas en su código, así que es bueno saber qué significa.
Desafío: Crear un boletín de calificaciones para estudiantes
Pon a prueba tus conocimientos sobre los tipos de datos de Java completando un pequeño
ejercicio de programación.
Instrucciones
2. Declara una variable doublecon nombre scorey asígnale un valor (usa un número decimal).
3. Declara una variable charcon nombre gradey asígnale un solo carácter (entre comillas
simples).
Esto funciona porque no hay riesgo de perder información. Por ejemplo, un int valor puede caber
de forma segura dentro de un double:
Fundición estrecha
La conversión a tipo restrictivo debe realizarse manualmente colocando el tipo entre
paréntesis ()delante del valor.
Esto es necesario porque la reducción puede provocar la pérdida de datos (por ejemplo, la
eliminación de decimales al convertir un doublea un int):
Utilizamos la conversión de tipos para asegurarnos de que el resultado sea un valor de punto
flotante , en lugar de un número entero:
Incrementar y decrementar
Incrementar y decrementar son operaciones muy comunes en programación, especialmente al
trabajar con contadores, bucles y matrices (sobre las que aprenderás más en capítulos
posteriores).
Imagina que estás creando un programa para contar cuántas personas entran y salen de una
habitación. Puedes usar ++para incrementar el contador cuando alguien entra y --para disminuirlo
cuando alguien sale:
Operadores de comparación
Los operadores de comparación se utilizan para comparar dos valores (o variables). Esto es
importante en programación, ya que nos ayuda a encontrar respuestas y tomar decisiones.
El valor de retorno de una comparación es verdadero trueo falso false. Estos valores se conocen
como valores booleanos , y aprenderás más sobre ellos en el capítulo sobre valores
booleanos y condicionales (If...Else ).
En el siguiente ejemplo, utilizamos el operador mayor que> ( ) para averiguar si 5 es mayor que
3:
Orden de operaciones
Aquí tienes algunos operadores comunes, ordenados de mayor a menor prioridad:
•()- Paréntesis
•*, /, %- Multiplicación, División, Módulo
•+- -Suma, Resta
•>, <, >=, <=- Comparación
•==- !=Igualdad
•&&- Y lógico
•||- OR lógico
•=- Asignación
En el interior main(), complete los siguientes pasos:
Cadenas de Java
Las cadenas de texto se utilizan para almacenar texto.
Una Stringvariable contiene una colección de caracteres rodeados de comillas dobles ( ""):
Longitud de la cuerda
En Java, una cadena de caracteres (String) es en realidad un objeto, lo que significa que
contiene métodos que pueden realizar ciertas operaciones sobre las cadenas.
Por ejemplo:
Comparación de cadenas
Para comparar dos cadenas, puedes usar el equals()método:
[Link]([Link](txt2)); // true
[Link]([Link](txt4)); // false
Concatenación de cadenas
El +operador se puede utilizar entre cadenas para combinarlas. Esto se llama concatenación :
Tenga en cuenta que hemos añadido un texto vacío (" ") para crear un espacio entre firstName y
lastName en la impresión.
Concatenación en oraciones
Puedes usar la concatenación de cadenas para construir oraciones con texto y variables:
El método concat()
También puedes utilizar este concat()método para concatenar cadenas:
Nota: Si bien puede usarlo concat()para unir varias cadenas, la mayoría de los desarrolladores
prefieren el +operador porque es más corto y más fácil de leer.
¡ADVERTENCIA!
La solución para evitar este problema es utilizar el carácter de escape de barra invertida .
Código resultado
\n Nueva línea
\t Pestaña
\b Retroceso
\r Retorno de carro
\f Fuente de formulario
Nota: La mayoría de estos códigos de escape rara vez se utilizan en la programación moderna.
Los más comunes son \n(salto de línea), \"(comillas dobles) y \\(barra invertida).
Instrucciones
[Link]( x,y )
Este método se puede utilizar para encontrar el valor más alto de x e y :[Link](x,y)
Matemá[Link]( x,y )
Este método se puede utilizar para encontrar el valor mínimo de x e y :[Link](x,y)
[Link]( x )
El método devuelve la raíz cuadrada de x :[Link](x)
Matemá[Link]( x )
El método devuelve el valor absoluto (positivo) de x :[Link](x)
[Link]( x, y )
El método devuelve el valor de x elevado a la potencia de y :[Link](x, y)
Métodos de redondeo
Java tiene varios métodos para redondear números:
Números aleatorios
[Link]()Devuelve un número aleatorio entre 0,0 (inclusive) y 1,0 (exclusivo):
Para tener más control sobre el número aleatorio, por ejemplo, si solo desea un número aleatorio
entre 0 y 100, puede utilizar la siguiente fórmula:
Nota: [Link]() devuelve un double. Para obtener un entero, debe convertirlo con (int).
•SÍ / NO
•ENCENDIDO / APAGADO
•VERDADERO / FALSO
Para ello, Java dispone de un booleantipo de dato que puede almacenar truevalores false.
El nombre booleano proviene de George Boole , un matemático que definió por primera vez el
sistema lógico utilizado en las computadoras actuales.
Valores booleanos
Un tipo booleano se declara con la booleanpalabra clave y solo puede tomar los
valores trueo false:
En la práctica, los valores booleanos suelen ser el resultado de expresiones y se utilizan para
comprobar condiciones en los programas (véase más abajo).
Expresiones booleanas
Una expresión booleana devuelve un valor booleano: trueo false.
Esto resulta útil para desarrollar la lógica y tomar decisiones en los programas.
Por ejemplo, puede utilizar un operador de comparación , como el operador mayor que ( >), para
averiguar si una expresión (o una variable) es verdadera o falsa:
En los ejemplos que se muestran a continuación, utilizamos el operador de igualdad ( ==) para
evaluar una expresión:
Almacena el resultado en una variable booleana.
Instrucciones
Piénsalo como en la vida real: si llueve, lleva un paraguas. De lo contrario, no hagas nada.
Cada ifenunciado necesita una condición que dé como resultado trueo false.
Esto significa que iflas declaraciones trabajan de la mano con booleanlos valores:
Por lo general, las condiciones se crean utilizando operadores de comparación, como los que se
muestran a continuación:
•Se utiliza ifpara especificar un bloque de código que se ejecutará si se cumple una
condición determinada.
•Se utiliza elsepara especificar un bloque de código que se ejecutará si la misma condición
es falsa.
•Se utiliza else ifpara especificar una nueva condición a comprobar, si la primera
condición es falsa.
•Se utiliza switchpara especificar varios bloques de código alternativos que se ejecutarán.
La instrucción if
La ifinstrucción especifica un bloque de código que se ejecutará si se cumple una condición true:
Tenga en cuenta también que ifestá en minúsculas. Las mayúsculas (If o IF) generarán un error.
Nota: Escribir if (isLightOn)es lo mismo que escribir if (isLightOn == true), pero más corto
y fácil de leer.
Aquí está el mismo ejemplo con el valor falsepara ver que el programa continúa incluso cuando
el bloque de código no se ejecuta:
Si sin brackets
Si una ifinstrucción tiene solo una línea de código, puede escribirla sin llaves { }:
Problema potencial
Sin llaves, solo la primera línea después de la coma ifpertenece a ella. Cualquier otra línea se
ejecutará sin importar qué, lo que puede generar resultados inesperados:
El camino seguro
Para evitar errores, utilice siempre llaves { }. Esto deja claro a qué línea pertenece
la ifinstrucción:
Consejo: El uso constante de llaves { }hace que el código sea más claro, más fácil de leer y
previene errores sutiles.
La declaración else
[Link]("Good day.");
} else {
[Link]("Good evening.");
Ejemplo explicado
En el ejemplo anterior, el tiempo (20) es mayor que 18, por lo que la condición es false. Debido a
esto, pasamos a la elsecondición e imprimimos en la pantalla "Buenas noches". Si el tiempo fuera
menor que 18, el programa imprimiría "Buen día".
Notas
• elseno tiene una condición: se ejecuta cuando ifse cumple la condición false.
La instrucción else if
Utilice la else ifinstrucción para especificar una nueva condición para comprobar si la primera
condición es false.
Piénsalo como en la vida real: si llueve, lleva un paraguas. Si hace sol, ponte gafas de sol. Si no,
simplemente sal a la calle como siempre.
Si el valor de timefuera 22, ninguna de las condiciones sería verdadera y el programa imprimiría
"Buenas noches." en su lugar:
Abreviatura if...else
También existe una forma abreviada de if else , que se conoce como operador ternario porque
consta de tres operandos.
Se puede utilizar para reemplazar varias líneas de código con una sola línea, y se usa con mayor
frecuencia para reemplazar simples sentencias if-else:
Ternario anidado (opcional)
Puedes anidar operadores ternarios para manejar más de dos resultados posibles, pero esto puede
hacer que tu código sea más difícil de leer:
Consejo: Utilice el operador ternario para opciones cortas y sencillas. Para lógica más larga o
compleja, el operador ternario if...elsees más fácil de leer.
Anidado si
También puedes colocar una ifinstrucción dentro de otra if. Esto se llama una instrucción if
anidada .
Una estructura anidada ifpermite comprobar una condición solo si otra condición ya está
presente true.
Notas
•Puedes anidar tantas ifinstrucciones como quieras, pero evita que el código sea
demasiado profundo, ya que puede resultar difícil de leer.
•El anidado ifse usa a menudo junto con elsey else ifpara la toma de decisiones más
complejas.
Y ( &&)
Utilice AND ( &&) cuando ambas condiciones deban ser verdaderas:
NO ( !)
Utilice NOT ( !) para invertir una condición:
Instrucciones
2. Utilice una ifinstrucción con el >=operador para comprobar si agetiene 18 años o más.
Imagínalo como pedir comida en un restaurante: si eliges el número 1, te dan pizza. Si eliges el 2,
te dan una hamburguesa. Si eliges el 3, te dan pasta. En caso contrario, no te dan nada .
Esto detendrá la ejecución de más código y pruebas de casos dentro del bloque.
Cuando se encuentra una coincidencia y el trabajo está hecho, es hora de un descanso. No hay
necesidad de realizar más pruebas.
Una pausa puede ahorrar mucho tiempo de ejecución porque "ignora" la ejecución de todo el resto
del código en el bloque switch.
Instrucciones
El código del editor está incompleto. Corríjalo insertando los valores que faltan para que el
programa imprima el orden correcto.
Bucles
Los bucles pueden ejecutar un bloque de código siempre que se cumpla una condición específica.
Los bucles son útiles porque ahorran tiempo, reducen errores y hacen que el código sea más
legible.
Nota: ¡No olvides incrementar la variable utilizada en la condición ( i++), de lo contrario el bucle
nunca terminará!
¿Te preguntas por qué usamos esa letra ien el ejemplo anterior? Es una variable de contador y
una opción común en bucles simples porque es corta, tradicional y significa "índice" o "iterador".
El bucle Do/While
El do/whilebucle es una variante del whilebucle. Este bucle ejecutará el bloque de código una
vez , antes de comprobar si la condición es verdadera . Luego, repetirá el bucle mientras la
condición sea verdadera .
Ejemplo de Do/While
El siguiente ejemplo utiliza un do/whilebucle. El bucle siempre se ejecutará al menos una vez,
incluso si la condición es falsa , porque el bloque de código se ejecuta antes de que se compruebe
la condición:
¡No olvides incrementar la variable utilizada en la condición ( i++), de lo contrario el bucle nunca
terminará!
El do/whilebucle es diferente: siempre ejecutará el bloque de código al menos una vez , incluso
si la condición es falsa desde el principio.
En el ejemplo siguiente, la variable icomienza en 10, por lo que i < 5es falsa inmediatamente.
Aun así, el bucle se ejecuta una vez antes de comprobar la condición:
Resumen: Un do/whilebucle siempre se ejecuta al menos una vez, incluso si la condición inicial
es falsa. Esta es la principal diferencia con respecto a un whilebucle que omitiría completamente
el bloque de código en la misma situación.
Este comportamiento resulta do/whileútil cuando se desea que algo ocurra al menos una vez,
como mostrar un mensaje o solicitar información al usuario.
Instrucciones
2. Utilice un whilebucle que se ejecute durante el tiempo que sea necesario.i <= 5
La instrucción 1 se ejecuta (una sola vez) antes de la ejecución del bloque de código.
Imprimir números
El siguiente ejemplo imprimirá los números del 0 al 4:
Ejemplo explicado
•La instrucción 1 establece una variable antes de que comience el bucle:int i = 0
•La instrucción 2 define la condición para que se ejecute el bucle: i < 5. Si la condición
es verdadera, el bucle se ejecutará de nuevo; si es falsa, el bucle terminará.
•La instrucción 3 incrementa un valor cada vez que se ejecuta el bloque de código:i++
El bucle foreach
También existe un bucle " for-each ", que se utiliza exclusivamente para recorrer los elementos
de una matriz (u otras estructuras de datos ):
El bucle for-each es más simple y legible que un forbucle regular, ya que no necesita un
contador (como i < [Link]).
Aquí tenemos un ejemplo similar con números. Creamos una matriz de enteros y usamos un
bucle for-each para imprimir cada valor:
Nota: No te preocupes si aún no entiendes del todo los arrays. Aprenderás más sobre ellos en
el capítulo sobre arrays en Java .
Desafío: Cuenta hasta 5
Pon a prueba tus conocimientos sobre los bucles for en Java completando un pequeño ejercicio
de programación.
Instrucciones
1. Declarar int i(ya sea antes del bucle o dentro del for)
2. Utiliza un forbucle y:
• Colocari = 1
• Ejecutar el bucle mientrasi <= 5
• Aumentar icada vez
• Dentro del bucle, imprimei
Romper
Ya has visto esta breakfrase en un capítulo anterior de este tutorial. Se usaba para "saltar" de
una switchfrase.
Continuar
La continueinstrucción interrumpe una iteración (en el bucle) si se cumple una condición
específica y continúa con la siguiente iteración del bucle.
Es bueno recordar:
Matrices de Java
Los arreglos se utilizan para almacenar múltiples valores en una sola variable, en lugar de declarar
variables separadas para cada valor.
String[] cars;
Ahora hemos declarado una variable que contiene una matriz de cadenas. Para insertar valores en
ella, puedes colocarlos en una lista separada por comas, dentro de llaves { } :
Nota: Los índices de los arreglos comienzan con 0: [0] es el primer elemento, [1] es el segundo
elemento, etc.
Imagina una matriz como cajas numeradas, donde cada caja almacena un elemento:
Índice Elemento
0
Volvo
1
BMW
2
Ford
3
Mazda
Longitud de la matriz
Para averiguar cuántos elementos tiene una matriz, utilice la lengthpropiedad:
cars[0] = "Volvo";
cars[1] = "BMW";
cars[2] = "Ford";
cars[3] = "Mazda";
Sin embargo, si ya conoces los valores, no necesitas escribir new. Ambos crean el mismo array:
// With new
String[] cars = new String[] {"Volvo", "BMW", "Ford", "Mazda"};
•Se utiliza new String[4]para crear una matriz vacía con 4 ranuras y luego rellenarlas más
tarde.
•O bien, utilice new String[] {"Volvo", "BMW", "Ford", "Mazda"}(sin especificar el
número de elementos) para crear la matriz y asignar valores al mismo tiempo.
Consejo: La sintaxis abreviada se usa con mayor frecuencia cuando se conocen los valores desde
el principio. Úsela newcon un tamaño cuando desee crear una matriz vacía y llenarla
posteriormente.
Recorrer un array
Puedes recorrer los elementos del array con el forbucle y usar la lengthpropiedad para
especificar cuántas veces debe ejecutarse el bucle.
Este ejemplo crea una matriz de cadenas y luego utiliza un forbucle para imprimir cada elemento,
uno por uno:
Aquí tenemos un ejemplo similar con números. Creamos una matriz de enteros y usamos
un forbucle para imprimir cada valor:
Recorrer un array con ForEach
También existe un bucle " for-each ", que se utiliza exclusivamente para recorrer los elementos
de una matriz (u otras estructuras de datos ):
Los dos puntos ( :) se leen como "en". Por lo tanto, puedes leer el bucle como: "para cada variable
en el array" .
El siguiente ejemplo utiliza un bucle foreach para imprimir todos los elementos del array cars :
Esto significa: para cada elemento String en el carsarray (aquí llamado car), imprime su valor.
En comparación con un bucle normal for, el bucle for-each es más fácil de escribir y leer porque
no necesita un contador (como i < [Link]). Sin embargo, solo devuelve los valores, no sus
posiciones (índices) en el array.
Por lo tanto, si necesita tanto la posición (índice) de cada elemento como su valor, un forbucle
regular es la opción correcta. Por ejemplo, al imprimir los números de asiento en una fila de teatro,
necesita mostrar tanto el número de asiento (el índice) como quién está sentado allí (el valor):
Nota: El bucle for-each es ideal cuando solo necesitas leer elementos. Si deseas modificar los
elementos posteriormente o mantener un registro de su índice, utiliza un forbucle normal.
Matrices multidimensionales
Una matriz multidimensional es una matriz que contiene otras matrices.
Puedes usarlo para almacenar datos en una tabla con filas y columnas.
Para crear una matriz bidimensional, escriba cada fila dentro de sus propias llaves :
•Primera fila:{1, 4, 2}
•Segunda fila:{3, 6, 8}
Piénsalo de esta manera:
Elementos de acceso
Para acceder a un elemento de una matriz bidimensional, se necesitan dos índices: el primero
para la fila y el segundo para la columna.
Recuerda: Los índices de los arreglos comienzan en 0. Esto significa que la fila 0es la primera fila
y la columna 0es la primera columna. (Por lo tanto, el índice de fila 1es la segunda fila y el índice
de columna 2es la tercera columna).
Nota: Fíjese en que las filas pueden tener longitudes diferentes. En este ejemplo, la segunda fila
tiene más elementos que la primera, y eso es perfectamente válido en Java.
Instrucciones
Métodos de Java
Un método es un bloque de código que solo se ejecuta cuando se le llama.
Los métodos se utilizan para realizar ciertas acciones, y también se conocen como funciones .
¿Por qué usar métodos? Para reutilizar código: define el código una vez y úsalo muchas veces.
Crear un método
Un método debe declararse dentro de una clase. Se define con el nombre del método, seguido de
paréntesis () . Java proporciona algunos métodos predefinidos, como [Link](), pero
también puedes crear tus propios métodos para realizar ciertas acciones:
Ejemplo explicado
•myMethod()es el nombre del método
•staticEsto significa que el método pertenece a la clase Main y no es un objeto de la clase
Main. Aprenderás más sobre objetos y cómo acceder a los métodos a través de ellos más
adelante en este tutorial.
•voidEsto significa que este método no tiene un valor de retorno. Aprenderás más sobre los
valores de retorno más adelante en este capítulo.
Llamar a un método
Para llamar a un método en Java, escriba el nombre del método seguido de dos paréntesis () y un
punto y coma ;
En el siguiente ejemplo, myMethod()se utiliza para imprimir un texto (la acción), cuando se llama:
Ejemplo
Dentro main, llama al myMethod()método:
Instrucciones
3. Llamar welcomeMessage()adentromain()
Nota: El método debe ser static.
Parámetros y argumentos
La información se puede pasar a los métodos como parámetro. Los parámetros
actúan como variables dentro del método.
Los parámetros se especifican después del nombre del método, entre paréntesis.
Puedes añadir tantos parámetros como quieras, separándolos con una coma.
El siguiente ejemplo tiene un método que toma como parámetro un
nombre Stringllamado fname . Cuando se llama al método, le pasamos un
nombre, que se usa dentro del método para imprimir el nombre completo:
Cuando se pasa un parámetro al método, se le llama argumento . Por lo tanto, del
ejemplo anterior: fnamees un parámetro , mientras
que Liam, Jennyy Anjason argumentos .
Tenga en cuenta que, cuando trabaje con varios parámetros, la llamada al método
debe tener el mismo número de argumentos que de parámetros, y los
argumentos deben pasarse en el mismo orden.
Valores de retorno
En la página anterior , utilizamos la voidpalabra clave en todos los ejemplos
(como ), lo que indica que el método no debe devolver un
[Link] void myMethod(int x)
Si desea que el método devuelva un valor, puede usar un tipo de dato primitivo
(como int, char, etc.) en lugar de void, y usar la return palabra clave dentro del
método:
public class Main {
static int myMethod(int x) {
return 5 + x;
}
Ámbito de Java
En Java, las variables solo son accesibles dentro de la región donde se crean. Esto
se llama ámbito .
Ejemplo
public class Main {
public static void main(String[] args) {
Recursión en Java
La recursión es la técnica de llamar a una función. Esta técnica permite
descomponer problemas complejos en problemas más sencillos y fáciles de
resolver.
La recursión puede resultar un poco difícil de entender. La mejor manera de
comprender cómo funciona es experimentando con ella.
Ejemplo de recursión
Sumar dos números es fácil, pero sumar un rango de números es más
complicado. En el siguiente ejemplo, se utiliza la recursión para sumar un rango
de números, descomponiéndolo en la sencilla tarea de sumar dos números:
Utilice la recursión para sumar todos los números del 1 al 10.
public class Main {
public static int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
Ejemplo explicado
Cuando sum()se llama al método, este suma el parámetro ka la suma de todos los
números menores que ky devuelve el resultado. Cuando kse convierte en 0, el
método simplemente devuelve 0. Al ejecutarse, el programa sigue estos pasos:
10 + suma(9)
10 + ( 9 + suma(8) )
10 + ( 9 + ( 8 + suma(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + suma(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 09 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 +
0
Dado que el método no se llama a sí mismo cuando kes 0, el programa se detiene
ahí y devuelve el resultado.
Condición de parada
Así como los bucles pueden generar bucles infinitos, los métodos recursivos
pueden generar recursión infinita. La recursión infinita se produce cuando un
método nunca deja de llamarse a sí mismo. Todo método recursivo debe tener
una condición de parada, que es la condición en la que el método deja de
llamarse a sí mismo. En el ejemplo anterior, la condición de parada se da cuando
el parámetro kse vuelve cero.
Resulta útil ver diversos ejemplos para comprender mejor el concepto. En este
ejemplo, el método suma un rango de números entre un inicio y un final. La
condición de parada para este método recursivo es cuando final no es mayor
que inicio :
clase
Fruta
Objetos
Manzana
Banana
mango
Así pues, una clase es una plantilla para objetos, y un objeto es una instancia de
una clase.
Cuando se crean los objetos individuales, estos heredan todas las variables y
métodos de la clase.
En el próximo capítulo aprenderás mucho más sobre clases y objetos .
Clases/Objetos de Java
Java es un lenguaje de programación orientado a objetos.
En Java, todo está asociado a clases y objetos, junto con sus atributos y métodos.
Por ejemplo: en la vida real, un coche es un objeto. El coche tiene atributos ,
como peso y color, y métodos , como conducir y frenar.
Una clase es como un constructor de objetos, o un "plano" para crear objetos.
En Java, un objeto se crea a partir de una clase. Después de definir una clase,
puedes crear objetos a partir de ella usando la newpalabra clave:
Múltiples objetos
Puedes crear varios objetos de una misma clase:
Modificar atributos
También puede modificar los valores de los atributos:
public class Main {
int x;
Múltiples objetos
Si crea varios objetos de una misma clase, puede cambiar los valores de los
atributos en un objeto sin afectar los valores de los atributos en los demás:
Atributos múltiples
Puedes especificar tantos atributos como quieras:
Ejemplo
public class Main {
String fname = "John";
[Link]("Hello World!");
Ejemplo explicado
1) Creamos una Mainclase personalizada con la classpalabra clave.
2) Creamos los métodos fullThrottle()y speed() en la Mainclase.
3) El fullThrottle()método y el speed() método imprimirán algún texto cuando
sean llamados.
4) El speed() método acepta un intparámetro llamado maxSpeed- lo usaremos
en 8) .
5) Para poder utilizar la Mainclase y sus métodos, necesitamos crear un objeto de
la Mainclase.
6) Luego, ve al main()método, que ya sabes que es un método integrado de Java
que ejecuta tu programa (se ejecuta cualquier código dentro de main).
7) Al usar la newpalabra clave creamos un objeto con el nombre myCar.
8) Luego, llamamos a los métodos fullThrottle()y en el objeto, y ejecutamos el
programa usando el nombre del objeto ( ), seguido de un punto ( ), seguido del
nombre del método ( y ). Nótese que agregamos un parámetro de 200 dentro
del mé[Link]() [Link](); speed(200);int speed()
Recuerda eso...
El punto ( .) se utiliza para acceder a los atributos y métodos del objeto.
Para llamar a un método en Java, escriba el nombre del método seguido de un
conjunto de paréntesis () , seguido de un punto y coma ( ;).
Una clase debe tener un nombre de archivo coincidente ( Mainy [Link] ).
Constructores de Java
En Java, un constructor es un método especial que se utiliza para inicializar
objetos.
El constructor se llama cuando se crea un objeto de una clase.
Se puede utilizar para establecer valores iniciales para los atributos de los
objetos:
/ Create a Main class
public class Main {
int x; // Create a class attribute
// Create a class constructor for the Main class
public Main() {
x = 5; // Set the initial value for the class attribute x
}
public static void main(String[] args) {
Main myObj = new Main(); // Create an object of class Main (This
will call the constructor)
[Link](myObj.x); // Print the value of x
}
Tenga en cuenta que el nombre del constructor debe coincidir con el nombre
de la clase y no puede tener un tipo de retorno (como void).
Tenga en cuenta también que el constructor se llama cuando se crea el objeto.
Todas las clases tienen constructores por defecto: si no creas un constructor de
clase, Java lo crea automáticamente. Sin embargo, en ese caso no podrás
establecer valores iniciales para los atributos del objeto.
Parámetros del constructor
Los constructores también pueden aceptar parámetros, que se utilizan para
inicializar atributos.
El siguiente ejemplo agrega un int yparámetro al constructor. Dentro del
constructor, asignamos el valor de x al valor de y (x=y). Al llamar al constructor,
le pasamos un parámetro (5), que asignará el valor de x a 5:
public class Main {
int x;
public Main(int y) {
x = y;
}
public static void main(String[] args) {
Main myObj = new Main(5);
[Link](myObj.x);
}
Consejo: Piensa en ello this.x = x;como: " this.x(la variable de clase) obtiene
el valor de x(el parámetro)."
Sin this, el código anterior x = x;establecería el parámetro xigual a sí mismo, y
la variable de clase permanecería sin inicializar ( 0).
Modificadores
A estas alturas, ya estarás bastante familiarizado con la publicpalabra clave que
aparece en casi todos nuestros ejemplos:
public class Main
Modificador Descripción
public La clase es accesible desde cualquier otra clase.
default La clase solo es accesible por clases del mismo
paquete. Esto se utiliza cuando no se especifica un
modificador. Aprenderá más sobre paquetes en el
capítulo Paquetes.
Ejemplo explicado
Aquí, namese declara como public, por lo que se puede acceder a él desde fuera
de la Personclase. Pero agese declara como private, por lo que solo se puede
usar dentro de la Personclase.
Final
Si no desea tener la posibilidad de sobrescribir los valores de los atributos
existentes, declare los atributos como final:
public class Main {
final int x = 10;
final double PI = 3.14;
public static void main(String[] args) {
Main myObj = new Main();
myObj.x = 50; // will generate an error: cannot assign a value to
a final variable
[Link] = 25; // will generate an error: cannot assign a value
to a final variable
[Link](myObj.x);
Estático
Un staticmétodo pertenece a la clase, no a ningún objeto específico. Esto
significa que puedes llamarlo sin crear un objeto de la clase.
Un ejemplo sencillo que muestra cómo llamar a un staticmétodo directamente:
public class Main {
// Static method
static void myStaticMethod() {
[Link]("Static methods can be called without creating
objects");
}
// Main method
public static void main(String[] args) {
myStaticMethod(); // Call the static method
[Link](); // Or call it using the class name
}
Abstracto
Un abstractmétodo pertenece a una abstractclase y no tiene cuerpo. El cuerpo
lo proporciona la subclase:
// abstract class
abstract class Main {
public String fname = "John";
public int age = 24;
public abstract void study(); // abstract method
}
Modificador Descripción
final Esta clase no puede ser heredada por otras clases
(Aprenderás más sobre la herencia en el capítulo
correspondiente).
abstract Esta clase no se puede usar para crear objetos (Para
acceder a una clase abstracta, debe heredar de otra
clase. Aprenderá más sobre herencia y abstracción en
los capítulos correspondientes).
Encapsulación
El significado de encapsulación es asegurar que los datos "confidenciales"
permanezcan ocultos para los usuarios. Para lograr esto, debe:
•declarar variables/atributos de clase comoprivate
•Proporcionar métodos públicos get y set para acceder y actualizar el valor
de una private variable.
Prepararse y listo
En el capítulo anterior aprendiste que privatelas variables solo se pueden
acceder dentro de la misma clase (una clase externa no tiene acceso a ellas). Sin
embargo, es posible acceder a ellas si proporcionamos métodos públicos para
obtener y establecer datos.
El getmétodo devuelve el valor de la variable y el setmétodo establece el valor.
La sintaxis para ambos es que comienzan con geto set, seguido del nombre de la
variable, con la primera letra en mayúscula:
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
[Link] = newName;
Ejemplo explicado
El getmétodo devuelve el valor de la variable name.
El setmétodo toma un parámetro ( newName) y lo asigna a la namevariable.
La thispalabra clave se utiliza para referirse al objeto actual.
Sin embargo, dado que la namevariable está declarada como private, no
podemos acceder a ella desde fuera de esta clase:
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
[Link] = "John"; // error
[Link]([Link]); // error
Paquetes integrados
La API de Java es una biblioteca de clases preescritas, de uso gratuito, incluida en
el Entorno de Desarrollo de Java.
La biblioteca contiene componentes para gestionar la entrada de datos, la
programación de bases de datos y mucho más. La lista completa se puede
encontrar en el sitio web de Oracle: [Link] .
La biblioteca está dividida en paquetes y clases . Esto significa que puedes
importar una sola clase (junto con sus métodos y atributos) o un paquete
completo que contenga todas las clases que pertenecen al paquete especificado.
Para utilizar una clase o un paquete de la biblioteca, debe utilizar
la import palabra clave:
import [Link]; // Import a single class
import [Link].*; // Import the whole package
Ejemplo
Utilizar la Scannerclase para obtener la entrada del usuario:
import [Link];
class Main {
public static void main(String[] args) {
Scanner myObj = new Scanner([Link]);
[Link]("Enter username");
Importar un paquete
Existen muchos paquetes para elegir. En el ejemplo anterior, utilizamos
la Scannerclase del [Link]. Este paquete también incluye funciones
de fecha y hora, un generador de números aleatorios y otras clases de utilidad.
Para importar un paquete completo, finalice la instrucción con un asterisco (* *).
El siguiente ejemplo importará TODAS las clases del [Link]:
import [Link].*;
[Link]
package mypack;
class MyPackageClass {
public static void main(String[] args) {
[Link]("This is my package!");
}
Nota: El nombre del paquete debe escribirse en minúsculas para evitar conflictos
con los nombres de las clases.
Polimorfismo de Java
El polimorfismo significa "muchas formas" y se produce cuando tenemos muchas
clases que están relacionadas entre sí por herencia.
Como especificamos en el capítulo anterior, la herencia nos permite heredar
atributos y métodos de otra clase. El polimorfismo utiliza esos métodos para
realizar diferentes tareas. Esto nos permite realizar una misma acción de distintas
maneras.
Por ejemplo, pensemos en una superclase llamada Animalque tiene un método
llamado animalSound(). Las subclases de Animales podrían ser Cerdos, Gatos,
Perros, Pájaros, y también tienen su propia implementación de un sonido animal
(el cerdo gruñe, el gato maúlla, etc.):
class Animal {
public void animalSound() {
[Link]("The animal makes a sound");
}
}
Recuerda que del capítulo sobre herencia usamos la extendspalabra clave para
heredar de una clase.
Ahora podemos crear objetos Pigy Dogllamar al animalSound()método en ambos:
class Animal {
public void animalSound() {
[Link]("The animal makes a sound");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // Create a Animal object
Animal myPig = new Pig(); // Create a Pig object
Animal myDog = new Dog(); // Create a Dog object
[Link]();
[Link]();
[Link]();
Nota: Úselo supercuando desee llamar a un método de la clase padre que haya
sido sobrescrito en la clase hija.
class InnerClass {
int y = 5;
}
}
// Outputs 15 (5 + 10)
Si intentas acceder a una clase interna privada desde una clase externa, se
produce un error
Clase interna estática
Una clase interna también puede ser static, lo que significa que puedes acceder
a ella sin crear un objeto de la clase externa:
class OuterClass {
int x = 10;
Nota: al igual que staticlos atributos y los métodos, una staticclase interna no
tiene acceso a los miembros de la clase externa.
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
Una clase abstracta puede tener métodos tanto abstractos como regulares:
// Abstract class
abstract class Animal {
// Abstract method (does not have a body)
public abstract void animalSound();
// Regular method
public void sleep() {
[Link]("Zzz");
}
}
class Main {
public static void main(String[] args) {
Pig myPig = new Pig(); // Create a Pig object
[Link]();
[Link]();
Para acceder a los métodos de la interfaz, esta debe ser "implementada" (algo así
como heredada) por otra clase con la implements palabra clave (en lugar
de extends). El cuerpo del método de la interfaz lo proporciona la clase
"implementadora":
// Interface
interface Animal {
public void animalSound(); // interface method (does not have a
body)
public void sleep(); // interface method (does not have a body)
}
class Main {
public static void main(String[] args) {
Pig myPig = new Pig(); // Create a Pig object
[Link]();
[Link]();
}
• Al igual que las clases abstractas , las interfaces no se pueden usar para
crear objetos (en el ejemplo anterior, no es posible crear un objeto "Animal"
en MyMainClass).
1) Para lograr seguridad: oculte ciertos detalles y muestre solo los detalles
importantes de un objeto (interfaz).
2) Java no admite la herencia múltiple (una clase solo puede heredar de una
superclase). Sin embargo, esto se puede lograr mediante interfaces, ya que la
clase puede implementar varias. Nota: Para implementar varias interfaces,
sepárelas con una coma (vea el ejemplo a continuación).
Múltiples interfaces
interface FirstInterface {
public void myMethod(); // interface method
}
interface SecondInterface {
public void myOtherMethod(); // interface method
}
class Main {
public static void main(String[] args) {
DemoClass myObj = new DemoClass();
[Link]();
[Link]();
Clase anónima
Una clase anónima es una clase sin nombre. Se crea y se utiliza al mismo
tiempo.
A menudo se utilizan clases anónimas para sobrescribir métodos de una clase
o interfaz existente, sin necesidad de escribir un archivo de clase aparte.
Aquí creamos una clase anónima que extiende otra clase y sobrescribe su
método:
/ Normal class
class Animal {
public void makeSound() {
[Link]("Animal sound");
}
}
[Link]();
También puedes usar una clase anónima para implementar una interfaz sobre la
marcha:
/ Interface
interface Greeting {
void sayHello();
}
[Link]();
Utilice clases anónimas cuando necesite crear una clase corta para un solo uso.
Por ejemplo:
•Sobrescribir un método sin crear una nueva subclase.
•Implementar una interfaz rápidamente
•Pasar pequeños fragmentos de comportamiento como objetos