- Caracteristicas
- Identificadores. Partes de un programa.
- Variables. Constantes. Tipos primitivos. Operadores. Comentarios. Palabras reservadas.
- Operadores
- Palabras reservadas
- Control de Flujos
- Array (vectores, matrices, arreglos)
- Funciones y métodos
- Wrappers
- Colecciones
- API Java
- IDEs (Eclipse / IntelliJ / Netbeans)
- Maven (Constructor y Gestor de Proyectos)
- Tomcat
- Testing Automatico (JUnit)
- Libros
Caracteristicas
Multiplataforma. Es independiente de la plataforma, ejecutable en cualquier sistema con máquina virtual
Implica que un programa escrito en java debe ser COMPILADO para posteriormente ser INTERPRETADO por la JVM o JRE.
No hay punteros (lo que le hace más seguro y fácil de manejar)
A diferencia de algunos lenguajes de programación como C o C++, no existen punteros en el sentido tradicional que permiten acceder directamente a direcciones de memoria y manipularlas.
En lugar de punteros, Java utiliza referencias de objetos. Cuando trabajas con objetos en Java, estás manipulando referencias a esos objetos, no direcciones de memoria directas.
No es híbrido, sino totalmente orientado a objetos (aunque muchos programadores tienen reservas respecto a esta aseveración).
En una aplicación java solo hay clases; no existen datos sueltos ni procedimientos.
✅ Distribuido
Implementa excepciones (control de errores) de forma nativa
Es un lenguaje interpretado (lo que acelera su ejecución remota, aunque provoca que las aplicaciones Java sean más lentas en la ejecución que las aplicaciones escritas en lenguajes compilados como C++).
✅ Fuertemente tipificado o de tipado estático.
La fuerte tipificación significa que el tipo de una variable es verificado en tiempo de compilación, antes de que el programa se ejecute.
Esto contrasta con lenguajes de tipado débil o dinámico, donde los tipos pueden cambiar en tiempo de ejecución y las conversiones implícitas entre tipos son más flexibles.
✅ Multitarea (admite programación multihilo / multi-hebra). Permite múltiples hilos de ejecución, es decir que se ejecuten varias tareas en paralelo.
Tipos de datos y control de sintaxis más rigurosa que los lenguajes C y C++, lo que facilita la gestión de errores
Diseñado como una mejora de C++
Permite excepciones
✅ Case sensitive. Se deben respetar las mayúsculas y las minúsculas.
Lenguaje 4GL (lenguajes de cuarta generación)
Entorno. Versiones. Libros. Herramientas. JDK. Caracteristicas.
Identificadores. Partes de un programa.
Variables. Constantes. Tipos primitivos. Operadores. Comentarios. Palabras reservadas.
Variables
Los nombres de variables pueden contener letras y números (pero no pueden comenzar con un número) y algún otro símbolo, como el de subrayado, pero no podrán contener otros muchos símbolos, como los de las distintas operaciones matemáticas posibles (+,-,*,/), ni llaves o paréntesis, ni vocales acentuadas (á,é,í,ó…), ni eñes…
Tipos de datos
TIPO | DESCRIPCIÓN | DEFAULT | TAMAÑO | EJEMPLOS |
boolean | true o false | FALSE | 1 bit | true, false |
char | carácter unicode (una letra del alfabeto, dígito numérico, o simbolo de puntuación) | \u0000 | 16 bits | ‘a’, ‘\u0041’, ‘\101’, ‘\\’ |
byte | entero complemento de dos | 0 | 8 bits | 100, -50 |
short | entero complemento de dos (entero corto) | 0 | 16 bits | 10000,-20000 |
int (intiger/entero) | entero complemento de dos | 0 | 32 bits | 100000,-2,-1,0,1,2,-200000 |
long | entero complemento de dos | 0 | 64 bits | -2L,-1L,0L,1L,2L |
float | coma flotante IEEE 754 | 0 | 32 bits | 1.23e100f, -1.23e-100f, .3ef, 3.14f |
double | coma flotante IEEE 754 (precisión de 14 cifras) | 0 | 64 bits | 1.2345e300d, -1.2345e-300f, 1e1d |
Los tipos de datos primitivos se pueden organizar en 4 grupos: |
Numéricos enteros: Son los tipos byte, short, int y long. Los 4 representan números enteros con signo. |
Carácter: El tipo char representa un carácter codificado en el sistema unicode. |
Numérico decimal: Los tipos float y double representan números decimales en coma flotante. |
Lógicos: El tipo boolean es el tipo de dato lógico; los dos únicos posibles valores que puede representar un dato lógico son true y false. |
No son datos primitivos en JAVA:
Fecha
Cadena de texto (string)
Operadores
Son signos especiales para hacer acciones específicas.
Tipos de operadores en Java
A continuación, veremos los diferentes tipos de operadores existentes en Java.
Operadores aritméticos
Los operadores aritméticos en Java son símbolos especiales que se utilizan para realizar operaciones matemáticas en variables numéricas.
Estos operadores permiten realizar cálculos como la suma, resta, multiplicación, división, etc.
Operadores de asignación
Los operadores de asignación son fundamentales en Java ya que permiten asignar valores a variables. A través de estos operadores, se puede almacenar información en variables para su posterior uso en el programa.
El operador más comúnmente utilizado es el signo igual (=), que asigna el valor de la derecha a la variable de la izquierda. Por ejemplo, int x = 10; asigna el valor 10 a la variable x. Además del operador de asignación simple, Java proporciona operadores de asignación compuesta, como +=, -=, *=, /=, entre otros.
Estos operadores permiten actualizar el valor de una variable mediante una operación aritmética y asignación en un solo paso. Por ejemplo, x += 5; aumenta el valor de x en 5 unidades.
Operadores de comparación
Los operadores de comparación son esenciales para evaluar condiciones en programas Java. Comparan dos valores y devuelven un resultado booleano, es decir, true si la comparación es verdadera y false si es falsa. Algunos de los operadores de comparación más comunes son == (igual a), != (diferente de), < (menor que), > (mayor que), <= (menor o igual que) y >= (mayor o igual que).
Operador | Descripción |
---|---|
== | Igual a (compara si dos valores son iguales). |
!= | Distinto de (compara si dos valores son diferentes). |
> | Mayor que (compara si un valor es mayor que otro). |
< | Menor que (compara si un valor es menor que otro). |
>= | Mayor o igual que (compara si un valor es mayor o igual que otro). |
<= | Menor o igual que (compara si un valor es menor o igual que otro). |
Estos operadores son fundamentales para construir estructuras de control condicional, como las sentencias if y switch, que permiten que un programa tome decisiones basadas en condiciones.
Operadores lógicos
Los operadores lógicos son herramientas poderosas para combinar o invertir condiciones lógicas en un programa Java. Los operadores lógicos más comunes son && (AND lógico), || (OR lógico) y ! (NOT lógico).
El operador && devuelve true si ambas condiciones son verdaderas, || devuelve true si al menos una condición es verdadera, y ! invierte el valor de una condición, es decir, cambia true a false y viceversa.
Estos operadores son esenciales para construir expresiones condicionales complejas y tomar decisiones basadas en múltiples condiciones lógicas. Se utilizan en conjunto con operadores de comparación para crear lógica condicional robusta en programas Java.
Operadores de incremento y decremento
Los operadores de incremento (++) y decremento (—) son útiles para modificar el valor de una variable en una unidad.
El operador de incremento aumenta el valor de la variable en 1, mientras que el operador de decremento lo disminuye en 1.
Estos operadores son especialmente útiles en bucles y otras situaciones en las que se necesita actualizar una variable de forma repetida. También se pueden utilizar en combinación con operadores de asignación para realizar incrementos o decrementos personalizados, como x += 2; que incrementa x en 2 unidades.
El operador += en Java es un operador de asignación compuesta que combina suma y asignación. Esto significa que toma el valor actual de una variable, le suma un valor y luego asigna el resultado de nuevo a la misma variable.
int a = 5;
a += 3; // es equivalente a a = a + 3;
Operadores ternarios
Los operadores ternarios, también conocidos como operadores condicionales, son una característica concisa y poderosa de Java. Tienen la forma condición ? valor_si_verdadero : valor_si_falso.
Este operador evalúa una condición y devuelve uno de dos valores, dependiendo de si la condición es verdadera o falsa. Es una forma eficiente de expresar lógica condicional en una sola línea de código. Por ejemplo, int resultado = (x > y) ? x : y; asignará el valor de x a resultado si la condición (x > y) es verdadera, de lo contrario, asignará el valor de y.
Los operadores ternarios son útiles para simplificar expresiones condicionales simples y mejorar la legibilidad del código.
Esta es la lista de tipos de operador esenciales en Java, pero cabe destacar que existen otros tipos de operadores que pueden ser útiles en situaciones específicas:
Operadores de bits
Los operadores de bits se utilizan para realizar operaciones a nivel de bits en valores enteros.
Estos operadores permiten manipular datos binarios y realizar operaciones de desplazamiento de bits. Ejemplos de operadores de bits incluyen & (AND a nivel de bits), | (OR a nivel de bits), ^ (XOR a nivel de bits), << (desplazamiento a la izquierda) y >> (desplazamiento a la derecha).
Operadores de igualdad
Además de los operadores de comparación (== y !=), Java también ofrece operadores de igualdad equals() para comparar objetos por igualdad estructural en lugar de igualdad de referencia.
Estos operadores son comunes cuando se trabaja con objetos personalizados.
Operadores de concatenación
En el contexto de cadenas de texto (string), Java proporciona el operador + para la concatenación de cadenas.
Este operador se utiliza para unir dos o más cadenas de texto en una sola cadena.
Operadores de conversión de tipo
Cuando se trabaja con tipos de datos diferentes, es posible que necesites realizar conversiones de tipo.
Java ofrece operadores de conversión explícita, como (tipo) y métodos de conversión de tipo, como Integer.parseInt() y String.valueOf().
Operadores de instancia
El operador instanceof se utiliza para verificar si un objeto es una instancia de una clase o interfaz específica.
Esto es útil en programación orientada a objetos para verificar la relación de herencia.
Operadores de acceso a miembros
Java también tiene operadores de acceso a miembros como el operador de punto . y el operador de acceso a elementos de matriz [].
Estos operadores se utilizan para acceder a los campos (variables) y métodos de una clase o para acceder a elementos de una matriz.
Operadores de asignación ternarios
En situaciones donde se necesita asignar un valor a una variable basado en una condición, puedes utilizar un operador de asignación ternario como variable = (condición) ? valor_si_verdadero : valor_si_falso;.
Esto proporciona una forma compacta de asignar valores condicionalmente.
Palabras reservadas
Estas palabras tienen un significado especial en el lenguaje y no pueden ser usadas como identificadores (nombres de variables, clases, métodos, etc.)
abstract | assert | boolean | break | byte |
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | short | static | strictfp | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
Control de Flujos
if / Else if
Switch
For
Sintaxis:
for(int i = valor inicial; i <= valor final; i = i + paso)
for(i=1 ; i <= 10 ; i ++) {
break, continue
Valor inicial | índice de control, inicialización, valor inicial |
Condición | condición booleana, condición de continuidad del ciclo |
incremento/decremento | modificación del índice tras cada bucle |
length es una propiedad de arreglos (arrays) que indica el tamaño o la longitud del arreglo. Se utiliza comúnmente en bucles for para iterar sobre todos los elementos de un arreglo. Sin embargo, es importante tener en cuenta que length es una propiedad, no un método, por lo que no lleva paréntesis.
int[] numeros = {1, 2, 3, 4, 5};
// Iterar sobre todos los elementos del arreglo 'numeros'
for (int i = 0; i < numeros.length; i++) {
System.out.println(numeros[i]); // Imprimir cada elemento del arreglo
}
While
Es un bucle que va a repetir la sentencia más de una vez, mientras la condición sea cierta.
Do-While
Se caracteriza porque ejecuta un conjunto de instrucciones sin realizar previamente la evaluación de la expresión relacional y/o lógica.
for-each
El bucle «for each» (también conocido como «for-in» o «for-of«) es una característica en Java que se utiliza para recorrer (iterar sobre una secuencia de elementos) una colección (como un arreglo o una lista) de manera más sencilla y concisa. Proporciona una forma de iterar sobre cada elemento de una colección sin tener que utilizar un índice para acceder a cada elemento.
Es importante destacar que el bucle for-each no proporciona un índice explícito como lo hace el bucle for tradicional, por lo que no se puede acceder al índice del elemento directamente. Este tipo de bucle es útil cuando solo se necesita acceder a los elementos de una colección sin preocuparse por los índices.
Array (vectores, matrices, arreglos)
Un array es una variable que puede contener varios datos del mismo tipo. Colección de datos del mismo tipo
En Java, todas las matrices se asignan dinámicamente.
Una variable array en Java se declara como otras variables con corchetes [ ] después del tipo de datos.
Las variables en el array están ordenadas y cada una tiene un índice que comienza desde 0.
(Se empieza a numerar desde 0 y se termina en n-1)
El array Java también se puede usar como un campo estático, una variable local o un parámetro de método.
El tamaño de un array debe especificarse mediante un valor int y no, long o short.
La superclase directa de un tipo de array es Object.
Cada tipo de array implementa las interfaces Cloneable y java.io.Serializable.
El array puede contener tipos de datos primitivos así como también objetos de una clase según la definición del array. En el caso de los tipos de datos primitivos, los valores reales se almacenan en ubicaciones de memoria contigua. En el caso de los objetos de una clase, los objetos reales se almacenan en heap.
Arrays multidimensionales
Aunque en Java se pueden crear arrays de más de dos dimensiones, los arrays bidimensionales son los más utilizados.
Arrays multidimensionales irregulares
Usos:
public class Arrays_bidimensionales {
public static void main(String[] args) {
// Declarar y crear un array bidimensional
int[][] matrix = new int[2][3]; // 2 filas y 3 columnas
// Inicializar valores
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
// Imprimir valores
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
Funciones y métodos
En Java, un método es un bloque de código que realiza una tarea específica, y se invoca por su nombre cuando se necesita ejecutar esa tarea. Los métodos pueden recibir parámetros (entradas) y pueden devolver un valor (salida). Existen diferentes tipos de métodos en Java, y pueden clasificarse en varias categorías según su propósito, implementación, o acceso.
Sintaxis básica de un método
Tipos de métodos en Java
Wrappers
Los Wrappers java son utilizados para convertir cadenas de caracteres (texto) en números.
Normalmente usamos tipos primitivos y no objetos. Sin embargo, existe una manera de que estos datos puedan ser objetos, usando las llamadas clases envoltorio.
Los wrappers son útiles en situaciones en las que se necesita tratar a los tipos primitivos como objetos, por ejemplo para utilizarlos en colecciones o para invocar métodos que esperan un objeto como argumento.
Interfaces
Paradigma Funcional
Excepciones. Try / catch / Finally.
Colecciones
API Java
java.lang | java.util | java.io | java.net | java.sql | java.awt | java.swing | javax.swing | javax.servlet | javax.xml | java.nio | javax.mail | java.math | javax.math | java.time |
Boolean | ArrayList | BufferedReader | ContentHandler | Connection | Clase | JButton | JFrame | HttpServlet | Document | Path | Session | BigDecimal | BigDecimal | ChronoField |
Byte | Calendar | BufferedWriter | ContentHandlerFactory | Statement | Color | JComboBox | JButton | HttpServletRequest | Element | Files | Message | BigInteger | BigInteger | ChronoUnit |
Character | Collections | ByteArrayInputStream | CookieManager | PreparedStatement | Graphics | JDialog | JLabel | HttpServletResponse | Node | BufferedReader | Store | MathContext | MathContext | Clock |
Class | concurrent.Executor | ByteArrayOutputStream | CookiePolicy | CallableStatement | Graphics2D | JFrame | JTextField | ServletConfig | Attr | BufferedWriter | Transport | RoundingMode | RoundingMode | DateTimeFormatter |
Double | Date | DataInputStream | CookieStore | ResultSet | GraphicsDevice | JLabel | JTextArea | ServletContext | Text | FileChannel | Folder | MutableBigInteger | MutableBigInteger | DayOfWeek |
Enum | Function | DataOutputStream | DatagramSocket | SQLException | GraphicsEnvironment | JList | JList | ServletException | Comment | ByteBuffer | Address | MutableBigDecimal | MutableBigDecimal | Duration |
Float | HashMap | File | HttpClient | DatabaseMetaData | Rectangle | JMenuBar | JComboBox | ServletOutputStream | ProcessingInstruction | CharBuffer | BigRational | Instant | ||
Integer | HashSet | FileInputStream | HttpCookie | Savepoint | Font | JPanel | JMenu | PrintWriter | Transformer | Selector | BigComplex | LocalDate | ||
Long | Iterator | FileOutputStream | HttpRequest | Image | JProgressBar | JMenuBar | TransformerFactory | ServerSocketChannel | Complex | LocalDateTime | ||||
Math | LinkedList | FileReader | HttpResponse | Component | JScrollPane | JMenuItem | SocketChannel | LocalTime | ||||||
Number | List | FileWriter | HttpServer | Container | JSlider | JRadioButton | AsynchronousFileChannel | Month | ||||||
Object | Map | InputStreamReader | HttpURLConnection | Frame | JSpinner | JCheckBox | MonthDay | |||||||
Package | Properties | IOException | InetAddress | Panel | JSplitPane | JTable | Period | |||||||
ProcessBuilder.Redirect | Random | ObjectInputStream | MulticastSocket | Button | JTable | JTree | Week | |||||||
SecurityManager | Scanner | ObjectOutputStream | MalformedURLException | Label | JTextArea | JFileChooser | WeekFields | |||||||
Short | Set | OutputStreamWriter | Proxy | TextField | JTextField | JColorChooser | Year | |||||||
String | Stack | PipedInputStream | ProxySelector | TextArea | JTree | JOptionPane | YearMonth | |||||||
StringBuffer | Stream | PipedOutputStream | ServerSocket | plaf.basic | ZonedDateTime | |||||||||
StringBuilder | TreeMap | PrintWriter | Socket | |||||||||||
System | Vector | PushbackInputStream | URI | |||||||||||
Thread | GregorianCalendar | Reader | URL | |||||||||||
Throwable | StringReader | URLConnection | ||||||||||||
Void | StringWriter | |||||||||||||
InterruptedException | Writer |
Rest API
Jdbc (conexión a base de datos). MySQL. TCP IP.
JSP (Java Server Pages)
Servlets
Aplicaciones Web
Streams. Excel.
Lambda / enums
IDEs (Eclipse / IntelliJ / Netbeans)
Los IDEs (Entornos de Desarrollo Integrado) son herramientas indispensables para el desarrollo de software en Java, ya que proporcionan características como edición de código, depuración, compilación y gestión de proyectos, entre otras.
Java Project |
Project |
Package |
Class |
Interface |
Enum |
Annotation |
Source Folder |
Java Working Set |
Folder |
File |
Untitle Text File |
Task |
JUnit Test Case |
Example |
Other |
Ctrl+F11 | Run |
Acción | Atajo | Descripción |
Crear metodo main | Escribir main,pulsar CTRL + ESPACIO y seleccionar main method | Implementa : public static void main (String[] args){ } |
Impresion rápida por consola | Escribir syso y pulsar CTRL + ESPACIO | Implementa : System.out.println(); |
Sentencia IF | Escribir if,pulsar CTRL + ESPACIO y seleccionar la opción statement | Implementa : if (condition) {} o con la opción else |
Bucle DESDE (for) | Escribir for,pulsar CTRL + ESPACIO y seleccionar la opción | Implementa : for (int i = 0; i < array.length; i++) {} u otras opciones |
Bucle MIENTRAS (while) | Escribir while,pulsar CTRL + ESPACIO y seleccionar la opción | Implementa : while (condition) {} u otras opciones |
Bucle REPETIR HASTA (do..while) | Escribir do,pulsar CTRL + ESPACIO y seleccionar la opción | Implementa : do {} while (condition); |
Maven (Constructor y Gestor de Proyectos)
Apache Maven is a software project management and comprehension tool.
Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.
herramienta open-source que se creó con el objetivo de simplificar los procesos de build (compilar y generar ejecutables a partir del código fuente).
Nos permite compilar cualquier tipo de proyecto, librándonos de todas las dificultades que hay por detrás
(ej: configurar el proceso de build, analizar que partes del codigo se deben compilar, que librerias utiliza el codigo, donde incluirlas, que dependencias de compilación hay en un proyecto).
Maven es una herramienta capaz de gestionar un proyecto software completo
desde la etapa en la que se comprueba que el código es correcto, hasta que se despliega la aplicación, pasando por la ejecución de pruebas y generación de informes y documentación.
– Validación (validate): Validar que el proyecto es correcto.
– Compilación (compile).
– Test (test): Probar el código fuente usando un framework de pruebas unitarias.
– Empaquetar (package): Empaquetar el código compilado y transformarlo en algún formato tipo .jar o .war.
– Pruebas de integración (integration-test): Procesar y desplegar el código en algún entorno donde se puedan ejecutar las pruebas de integración.
– Verificar que el código empaquetado es válido y cumple los criterios de calidad (verify).
– Instalar el código empaquetado en el repositorio local de Maven, para usarlo como dependencia de otros proyectos (install).
– Desplegar el código a un entorno (deploy).
Tomcat
https://tomcat.apache.org/
Tomcat 9.0.50 Released
Es un contenedor de servlets y un servidor de aplicaciones Web
Tomcat proporciona un entorno de ejecución para aplicaciones Web que cumplen con los estándares Java Servlet y JavaServer Pages. Esto significa que puedes desarrollar aplicaciones Web utilizando estos estándares y ejecutarlas en Tomcat sin tener que preocuparte por el servidor Web subyacente.
Spring. Spring Boot. Hibernate.
Testing Automatico (JUnit)
Microservicios
Patrones de Diseño
Libros
Francisco Blasco – Programación Orientada a Objetos en JAVA-RA-MA Editorial (2021)
Programación Orientada a Objetos en JAVA (Bermudez) MIW.JEE.POOJ
Introducción a la programación (Vanegas Mendoza) – Introducción Java Parte 1
Programación básica en lenguaje JAVA (Sánchez Asenjo)
Programación Orientada a Objetos en JAVA (Bermudez)
Aprenda Java como si estuviera en primero
Web Scraping with Java (Ryan Mitchell) jsoup library
Fundamentos de programación (Villalobos)
Notas Introducción Lenguaje Programación JAVA (Ortega Arjona)
Ejercicios de programación en JAVA (Pérez Monte)
(Lopez Davila) Curso de Java – conexiones con base de datos MySQL
(Dean) Introducción a la programación con JAVA
(Jeff Friesen) Java XML and JSON: Document Processing for Java SE
Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
Java Intensive Coding Bootcamp (Sanjib Sinha)
(Balaji Varanasi) Introducing Maven
Trisha Gee – 97 Things every JAVA Programmer should Know-o reilly (2022)
Real-World Software Development – A Project-Driven Guide to Fundamentals in Java. by Raoul-Gabriel Urma, Richard Warburton
Java Intensive Coding Bootcamp LEARN LANGUAGE BASICS AND ALGORITHM More Than Hundred Difficult Problems With Solutions – Explained Step by Step, Designed for Absolute Beginners by Sanjib Sinha [Sinha
(Kiet Tran) Introduction to Web Service with Java